#include<stdio.h> int chess[4][4]={0}; int isok(int i,int j){ for(int k=0;k<4;k++){ if(chess[k][j]==1){ return 0; } for(int m=i-1, n=j-1;m>=0&&n>=0;m--,n--){ if(chess[m][n]==1){ return 0; } } for (int m = i - 1, n = j + 1; m >= 0 && n < 4; m--, n++) { if (chess[m][n] == 1) { return 0; } } } } int queen(int row){ if(row==4){ return 1; } for(int j=0;j<4;j++){ if(isok(row,j)){ chess[row][j]=1; if(queen(row+1)){ } } chess[row][j]=0; } return 0; } int main(){ if(queen(0)){ for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ printf("%d ",chess[i][j]); } } } return 0; }为什么运行没结果
时间: 2024-03-17 07:41:33 浏览: 17
你的代码有一个问题:当queen函数返回1时,没有输出任何结果。你需要在queen函数返回1时,输出结果,并且在queen函数中加入一个变量flag,用于表示是否找到了解。修改后的代码如下:
```
#include <stdio.h>
int chess[4][4] = {0};
int isok(int i, int j) {
for (int k = 0; k < 4; k++) {
if (chess[k][j] == 1) {
return 0;
}
for (int m = i - 1, n = j - 1; m >= 0 && n >= 0; m--, n--) {
if (chess[m][n] == 1) {
return 0;
}
}
for (int m = i - 1, n = j + 1; m >= 0 && n < 4; m--, n++) {
if (chess[m][n] == 1) {
return 0;
}
}
}
return 1;
}
int queen(int row) {
if (row == 4) {
return 1;
}
int flag = 0;
for (int j = 0; j < 4; j++) {
if (isok(row, j)) {
chess[row][j] = 1;
if (queen(row + 1)) {
flag = 1;
}
chess[row][j] = 0;
}
}
return flag;
}
int main() {
if (queen(0)) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", chess[i][j]);
}
printf("\n");
}
}
return 0;
}
```
这样就可以正确输出结果了。