2017-12-13 10 views
-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; 
} 
+1

どこがライン46である??

のthats – user463035818

+1

コード46と48を示すコードを追加してください。 – hyde

+0

コードは返品期限を過ぎていますか? – xyious

答えて

0

プリントアウトします。 if 45行目int線46には決して到達しない。

行46〜48を置くと、返り値がその実行をブロックするスコープから外れます。

リターンとスコープの終了括弧の間にコードを配置しないでください。

多くのIDEでは、到達不能なコードがあるという応答があります。ほとんどすべて:)

enter image description here