C语言的深搜题目 ,不晓得哪里有问题 c语言版的深搜代码,急求

C\u8bed\u8a00\u95ee\u9898\uff08\u4e0d\u8981C++\uff09 \u56de\u6eaf\u548c\u6df1\u641c\u4e0d\u662f\u592a\u660e\u767d\uff0c\u5e0c\u671b\u53ef\u4ee5\u7528\u5c3d\u91cf\u7b80\u5355\u7684\u65b9\u6cd5\u6765\u8be6\u7ec6\u6709\u6761\u7406\u5730\u89e3\u91ca\u4e00\u4e0b\uff0c\u6700

\u672c\u8d28\u4e0a\u662f\u4e00\u6837\u7684\u3002
\u4e2a\u4eba\u5bf9\u56de\u6eaf\u6709\u4e24\u79cd\u7406\u89e3\u3002
\u7b2c\u4e00\u79cd\u7406\u89e3\uff1a\u56de\u6eaf\u5c31\u662f\u4ee5\u975e\u9012\u5f52\u5b9e\u73b0\u7684\u6df1\u641c\uff0c\u8fd9\u6837\u7684\u8bdd\uff0c\u56de\u6eaf\u5c31\u5c5e\u4e8e\u6df1\u641c\u3002
\u7b2c\u4e8c\u79cd\u7406\u89e3\uff1a\u56de\u6eaf\u8fc7\u7a0b\uff0c\u662f\u6df1\u641c\u8fc7\u7a0b\u4e2d\u7684\u4e00\u4e2a\u5b50\u8fc7\u7a0b\u3002
\u4f8b\u5982\uff1a
void Dfs(int t)
{
\u2026\u2026
if (Ok()) //\u53ef\u884c\u6027\u5224\u65ad
{
Change_togo(); //\u641c\u7d22\u524d\u7684\u6807\u8bb0\u53ca\u4fee\u6539
Dfs(i+1); //\u6df1\u641c\u4e0b\u4e00\u5c42
Change_back(); //\u5c06\u6807\u8bb0\u548c\u4fee\u6539\u7684\u503c\u8fd8\u539f
}
}
\u5728\u8fd9\u4e2a\u6df1\u641c\u8fc7\u7a0b\u4e2d\uff0cChange_back()\u8fd9\u4e2a\u8fd8\u539f\u7684\u5b50\u8fc7\u7a0b\uff0c\u5c31\u53ef\u4ee5\u79f0\u4e3a\u56de\u6eaf\u8fc7\u7a0b\u3002
\u4e00\u822c\u7684\u6df1\u641c\u90fd\u5e26\u56de\u6eaf,\u4f46\u662f\u6ca1\u6709\u56de\u6eaf\u7684\u6df1\u641c\u90fd\u662f\u597d\u6df1\u641c\uff08\u4e00\u6b21\u5c31\u505a\u5b8c\u4e86\uff0c\u590d\u6742\u5ea6\u5927\u5927\u7684\u4f4e\uff09

\u5168\u6392\u5217\u7684\u4ee3\u7801

#include
#define MAXL 16

FILE *in, *out;

int d[MAXL], dp;
int n;

void printz();
bool find(int a);


int p(int a)
{
bool f=false;
for (int i=1; ((i<=n+1)&&(!f)); i++)
{
if (!find(i)) f=true;
}
if (!f) printz();

d[a]++;
if (d[a] > n+1)
{
d[a] = 0;
return(0);
}
if (a < n)
{
p(a+1);
}
p(a);
return(0);
}

bool find(int a)
{
for (int i=0; i<=n; i++)
{
if (d[i] == a)
{
return(true);
}
}
return(false);
}
void printz(void)
{
for (int i=0; i<=n; i++)
{
printf("%d", d[i]);
}
printf("\n");
}
int main(void)
{
scanf("%d", &n);
n--;
p(0);
return(0);
}


\u8d64\u88f8\u88f8\u7684DFS

这个实现的不是很好,pow是很慢的函数,而且有精度问题,可以预处理一下所有的ki*xi^pi
然后直接枚举,代码如下

#include<stdio.h>
int x[4][150];
int ans,n,m,k,p;
int pow(int x,int n)
{
    if(n==1)return x;
    int x2=x*x;
    if(n==2)return x2;
    if(n==3)return x2*x;
    if(n==4)return x2*x2;
}
void dfs(int sh,int he)
{
    if(sh==n){if(he==0)ans++;}
    else for(int i=0;i<m;i++)dfs(sh+1,he+x[sh][i]);//枚举第sh个x的解
}
int main()
{
    int i,j;
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&k,&p);
        for(j=0;j<m;j++)
            x[i][j]=k*pow(j+1,p);
    }
    dfs(0,0);
    printf("%d",ans);
}


dfs( )函数之前没有声明?

扩展阅读:扫一扫题目出答案 ... 作业帮免费拍题入口 ... 免费答题扫一扫 ... 学法减分20题库及答案 ... 扫一扫一秒出答案 ... 答题神器一扫就出答案 ... 百度扫一扫做题 ... 查答案扫一扫 ... 免费拍照答题一秒出答案 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网