马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
求助,这代码为毛错的啊。调试的时候,在notDanger()函数里,row的值居然会减小。
#include <stdio.h>
int num = 0;
int notDanger(int row, int j, int (*chess)[8])
{
int i, k;
int flag1=0, flag2=0, flag3=0, flag4=0, flag5=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<8 && k>=0; i++, k--)
{
if(*(*(chess+i)+k) != 0)
{
flag3 = 1;
break;
}
}
///判断右下方
for(i=row, k=j; i<8 && k<8; i++, k++)
{
if(*(*(chess+i)+k) != 0)
{
flag4 = 1;
break;
}
}
///判断左下方
for(i=row, k=j; i>=0 && k<8; i++, k++)
{
if(*(*(chess+i)+k) != 0)
{
flag5 = 1;
break;
}
}
if(flag1 || flag2 || flag3 || flag4 || flag5)
{
return 0;
}
else
{
return 1;
}
}
/// 参数row: 表示起始行
/// 参数n: 表示列数
/// 参数(*chess)[8]: 表示指向棋盘每一行的指针
void EightQueen(int row, int n, 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(8 == row)
{
printf("第%d种解法为:\n", num);
for(i=0; i<8; i++)
{
for(j=0; j<0; j++)
{
printf("%d ", chess2[i][j]);
}
printf("\n");
}
}
else
{
for(j=0; j<n; j++)
{
if(notDanger(row, j, chess2))/// 判断是否有危险
{
for(i=0; i<8; i++)
{
*(*(chess2+row)+i) = 0;
}
*(*(chess2+row)+j) = 1;
EightQueen(row+1, n, chess2);
}
}
}
}
int main()
{
int chess[8][8];
int i, j;
for(i=0; i<8; i++)
{
for(j=0; j<8; j++)
{
chess[i][j] = 0;
}
}
EightQueen(0, 0, chess);
printf("总共有%d解决方法!\n", num);
return 0;
}
楼主这里打错了
EightQueen(0, 0, chess);
printf("总共有%d解决方法!\n", num);
还有这里
|