所以我有这个代码,我正在尝试用c ++创建自己的n-queen程序来学习算法和回溯。
但是我在第46行中没有理解一些奇怪的行为,它没有将指定索引的2D char数组设置为'0',但是如果我将第46行中的代码移动到第48行,它就可以工作了。任何解释为什么会发生这种情况?
第二个问题,当我将第46行中的代码移动到第48行时,它工作正常,数组2d的输出正确。但函数f的最终返回并不像我预期的那样,而是打印4,它打印出62。
#include <bits/stdc++.h>
using namespace std;
bool check(char g[][4],int x, int y){
for (int i=x,j=y; i>-1 && y>-1; i--,j--)
if (g[i][j]=='1')
return false;
for (int i=0; i<4; i++)
if (g[i][y]=='1')
return false;
for (int i=x,j=y; i>-1 && j<4; i--, j++)
if (g[i][j]=='1')
return false;
for (int j=0; j<4; j++)
if (g[x][j]=='1')
return false;
for (int i=x,j=y; i<4 && j<4; i++, j++)
if (g[i][j]=='1')
return false;
for (int i=x,j=y; i<4 && j>-1; i++, j--)
if (g[i][j]=='1')
return false;
return true;
}
bool done(char g[][4]){
int counts=0;
for (int i=0; i<4 ; i++){
for (int j=0; j<4; j++){
if (g[i][j]=='1')
counts++;
}
}
if (count==4)
return true;
else
return false;
}
int f(char g[][4],int n, int m){
if (done(g)){
return 1;
}
for (int i=0; i<n; i++){
for (int j=0; j<m; j++){
if (check(g,i,j)){
g[i][j]='1';
return 1 + f(g,n,m);
g[i][j]='0'; //Backtracking
}
}
}
return -1;
}
int main(){
char gr[4][4]={
{'0','0','0','0'},
{'0','0','0','0'},
{'0','0','0','0'},
{'0','0','0','0'}
};
cout << f(gr,4,4) << endl << endl;
for (int i=0; i<4; i++){
for (int j=0; j<4; j++){
cout << gr[i][j] << " ";
}
cout << endl;
}
return 0;
}