永发信息网

C语言递归解决八皇后问题

答案:3  悬赏:0  手机版
解决时间 2021-03-18 03:35
求C语言大神帮忙看看我的错误在哪?我实在是找不到哪里错了,就是编译通不过。。
#include<stdio.h>
int sum=0;
int main ()
{
int EightQueen(int row,int col,int (*chess)[8]);
int notdanger(int row,int col,int (*chess)[8]);
int chess[8][8],i,j;
for (i=0;i<8;i++)
{
for(j=0;j<8;j++)
chess[i][j]=0;
}
EightQueen(0,8,chess);
printf("一共有 %d 种方案\n",sum);
return 0;
}
int EightQueen(int row,int col,int (*chess)[8])
{
int chess2[8][8],i,j;
for (i=0;i<8;i++)
{
for(j=0;j<8;j++)
{chess2[i][j]=chess[i][j];}
}
if (row==8)
{
printf ("第 %d 种解法",sum+1);
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
printf("%d",*(*chess2+i)+j));
printf("\n");
}
printf("\n");
sum++;
}
else
for (j=0;j<8;j++)
{
if (notdanger(row,j,chess))
{
for(i=0;i<8;i++)
{
*(*(chess2+raw)+i)=0;
*(*(chess2+raw)+j)=1;
}
EightQueen(row+1,col,chess2);
}
return 0;
}
int notdanger (int row,int j,int (*chess)[8])
{
int i,k,flag1=0,flag2=0,flag3=0;

for (i=0;i<8;i++)
{
if (*(*chess+i)+j)!=0)
{
flag1=1;
break;
}
}

for (i=row,k=j;i>=0&&k>=0;i--,k--)
{
if (*(*chess+i)+k)!=0)
{
flag2=1;
break;
}
}

for(i=row,k=j;i>=0 && k<8;i--,k++)
{
if (*(*chess2+i)+k)!=0)
{
flag3=1;
break;
}
}
if (flag1||flag2||flag3)
{
return 0;
}
else
{
return 1;
}
}
最佳答案
错了很多,有漏括号的,有的变量名写错了,有逗号输成中文的逗号的,给你改了一下,编译可以通过了,你对比一下错了什么
#include<stdio.h>
int sum=0;
int main ()
{
int EightQueen(int row,int col,int (*chess)[8]);
int notdanger(int row,int col,int (*chess)[8]);
int chess[8][8],i,j;
for (i=0;i<8;i++)
{
for(j=0;j<8;j++)
chess[i][j]=0;
}
EightQueen(0,8,chess);
printf("一共有 %d 种方案\n",sum);
return 0;
}
int EightQueen(int row,int col,int (*chess)[8])
{
int chess2[8][8],i,j;
for (i=0;i<8;i++)
{
for(j=0;j<8;j++)
{chess2[i][j]=chess[i][j];}
}
if (row==8)
{
printf ("第 %d 种解法",sum+1);
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
printf("%d",(*(*chess2+i)+j));
printf("\n");
}
printf("\n");
sum++;
}
else
for (j=0;j<8;j++)
{
if (notdanger(row,j,chess))
{
for(i=0;i<8;i++)
{
*(*(chess2+row)+i)=0;
*(*(chess2+row)+j)=1;
}
EightQueen(row+1,col,chess2);
}
return 0;
}
}
int notdanger (int row,int j,int (*chess)[8])
{
int i,k,flag1=0,flag2=0,flag3=0;

for (i=0;i<8;i++)
{
if ((*(*chess+i)+j)!=0)
{
flag1=1;
break;
}
}

for (i=row,k=j;i>=0&&k>=0;i--,k--)
{
if ((*(*chess+i)+k)!=0)
{
flag2=1;
break;
}
}

for(i=row,k=j;i>=0 && k<8;i--,k++)
{
if ((*(*chess+i)+k)!=0)
{
flag3=1;
break;
}
}
if (flag1||flag2||flag3)
{
return 0;
}
else
{
return 1;
}
}
全部回答
#include<stdio.h> int EightQueen(int row,int col,int (*chess)[8]); int notdanger(int row,int col,int (*chess)[8]);//函数声明要放在主函数外  int sum=0; int main () {  int chess[8][8],i,j;  for (i=0;i<8;i++)  {   for(j=0;j<8;j++)    chess[i][j]=0;  }  EightQueen(0,8,chess);  printf("一共有 %d 种方案\n",sum);  return 0; } int EightQueen(int row,int col,int (*chess)[8]) {  int chess2[8][8],i,j;  for (i=0;i<8;i++)   {    for(j=0;j<8;j++)    {chess2[i][j]=chess[i][j];}   }   if (row==8)   {       printf ("第 %d 种解法",sum+1); //逗号为中文输入逗号     for (i=0;i<8;i++)    {     for (j=0;j<8;j++)      printf("%d",(*(*chess2+i)+j));//括号不匹配          printf("\n");    }              printf("\n");     sum++;   }   else    for (j=0;j<8;j++)    {     if (notdanger(row,j,chess))     {      for(i=0;i<8;i++)      {       *(*(chess2+row)+i)=0;//raw没有定义,你是想用row吧?           *(*(chess2+row)+j)=1;//raw没有定义,你是想用row吧?      }     EightQueen(row+1,col,chess2);    }    } return 0; } int notdanger (int row,int j,int (*chess)[8]) {      int i,k,flag1=0,flag2=0,flag3=0;            for (i=0;i<8;i++)      {           if (*(*chess+i)+j)!=0)           {                flag1=1;                break;           }          }            for (i=row,k=j;i>=0&&k>=0;i--,k--)//逗号为中文逗号       {           if (*(*chess+i)+k)!=0)           {                flag2=1;                break;           }          }            for(i=row,k=j;i>=0 && k<8;i--,k++) //逗号为中文逗号       {       if (*(*chess2+i)+k)!=0)//括号比匹配        {        flag3=1;        break;       }      }           if (flag1||flag2||flag3)       {        return 0;       }       else        {        return 1;       } }评注:没有改完,你主要的地方在于中文逗号,花括号“{}”不匹配,“()”括号不匹配,变量raw没有定义,都是些低级错误,自己把代码的格式调整好,然后再试试。
queen[]是一个数组,其元素queen[i]表示第i个皇后位于第i行,第queen[i](值)列。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
格雷格·奥登 和霍华德在没进NBA前 表现谁好
连云山家常土菜馆在哪里啊,我有事要去这个地
《查理九世》的作者——雷欧幻像是谁?我需要
许昌市的中小企业都有哪些
稻花香珍品二号多少钱
从哪里可以批发到稀奇古怪的东西
算命说我四十二岁渐渐好难道是我四十二岁之前
正坑一街八巷地址在哪,我要去那里办事
三公生死门怎样计算?要懂点的来啊,希望能帮
红米noto3.忘记密码了,怎么弄?
电视剧绝杀中影佐的饰演者
汽车故障码中国丰田 b1421
义乌属于那个市直辖??上海到义乌到那坐车..火
蜜糖小厨(意式家庭西餐首座店)地址在什么地方
听写”的用意作文。
推荐资讯
怎样才能知道是否成为魅族会员
广州捷澳驰贸易有限公司怎么样?
jmeter 怎么判断是否执行成功
羊石这个地址在什么地方,我要处理点事
13关怎么过 密室逃脱22海上惊魂第13关攻略
为什么很多人都说我穿衣服好土
EMS要两天发一次货?
卫生学校地址在哪,我要去那里办事
家里买了2棵剑兰,每天都有淋洗米水,但现在2
7.5:1.3和5.7:3.1 能组成比例吗? 把过程写
难能可后面是什么成语接龙
长春御景名都到中东17.5打车多少钱
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?