-1
私はこのコードを持っています。私は自分のn-queenプログラムをC++で作成しようとしています。アルゴリズムの学習とバックトラックです。N-Queen backtracking in C++奇妙な
しかし、46行目でわからない奇妙な動作があります。指定されたインデックスの2D文字配列を '0'に戻していませんが、46行目のコードを48行目に移動すると、働いた。これがなぜ起こるかの説明
2番目の質問ですが、46行目のコードを48行目に移動すると、正常に動作し、2dの出力が正しく表示されます。しかし、関数fの最終的なリターンは私が期待したもの好きではないが、代わりに4を出力し、それはあなたが1つの+ F(G、N、M)を返す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;
}
どこがライン46である??
のthats – user463035818
コード46と48を示すコードを追加してください。 – hyde
コードは返品期限を過ぎていますか? – xyious