|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);
还有这里
|
|