求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;
}
}
C语言递归解决八皇后问题
答案:3 悬赏:0 手机版
解决时间 2021-03-18 03:35
- 提问者网友:两耳就是菩提
- 2021-03-17 08:40
最佳答案
- 五星知识达人网友:胯下狙击手
- 2021-03-17 09:53
错了很多,有漏括号的,有的变量名写错了,有逗号输成中文的逗号的,给你改了一下,编译可以通过了,你对比一下错了什么
#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 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;
}
}
全部回答
- 1楼网友:不如潦草
- 2021-03-17 11:46
#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没有定义,都是些低级错误,自己把代码的格式调整好,然后再试试。
- 2楼网友:蓝房子
- 2021-03-17 11:04
queen[]是一个数组,其元素queen[i]表示第i个皇后位于第i行,第queen[i](值)列。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯