2013-03-01 84 views
0

我被賦予修改一個8皇后程序的任務,使用一維數組並使用蠻力(已經做過回溯)。我想出了以下代碼:如何用蠻力解決8皇后1D陣列?

#include <cmath> 
#include <iostream> 
using namespace std; 

bool ok(int board[8]){ 

for(int j = 0; j <= 7; j++){ //check for repeating digits 
    cout << "ok loop 1"<<endl; 
    for (int k = 0; k <= 7; k++) 
    { 
     cout << "ok loop 2"<<endl; 
     if (board[k] = board[j]){ return false; } 
    } 
} 

for(int c = 7; c >= 0; c--){ //check if position is safe 
    cout << "ok loop 3"<<endl; 
    //int r = 0; 

    for(int i = 1; i <= c; i++){ 
    cout << "ok loop 4"<<endl; 
     if(board[c-i] == c) 
      return false; 
     else if ((board[c]-i)>0 && board[c-i]-i == 1) 

      return false; 
     else if ((board[c]+i)<=7 && board[c-i]+i == 1) 
      return false; 
    } // for loop 

} // for loop 
    return true; 
} // ok 




void print(int board[8], int c){ 
cout << "Solution " << c << ": " << endl; 
for(int i = 0; i < 8; i++){ 
{ 
    cout << board[i] <<" "; 
} 
} 

cout << endl; 
} 




int main() 
{ 

int b[8]={0}; //initialize the array 
int count = 0; 

for(b[0]=0; b[0]<8; b[0]++) 
for(b[1]=0; b[1]<8; b[1]++) 
    for(b[2]=0; b[2]<8; b[2]++) 
     for(b[3]=0 ; b[3]<8; b[3]++) 
      for(b[4]=0; b[4]<8; b[4]++) 
       for(b[5]=0; b[5]<8; b[5]++) 
        for(b[6]=0; b[6]<8; b[6]++) 
         for(b[7]=0; b[7]<8; b[7]++) 
          if(ok(b)) 
          { 
           count++; 
           print(b, count); 
          } 
system("PAUSE"); 
return 0; 
} 

它會一直保持循環,我不知道爲什麼。有人會幫助我嗎?

+1

你問調試器嗎?我注意到這一點:if(board [k] = board [j]){return false; } – 2013-03-01 17:18:28

+0

我不確定你在問什麼,對不起。 – Chase 2013-03-01 17:22:40

+0

@Andy T那麼我的理由是如果兩個索引有相同的數字,那麼這意味着它們在同一行上,所以函數將返回false。 – Chase 2013-03-01 17:24:20

回答

1

還有可以改進的幾件事情:

  • 如果你傳遞一個參考八個字符常量數組ok(),而不只是一個指向非const int類型,編譯器可以告訴你關於其中的一個問題。
  • 皇后有多少個不同的職位?我會說64,儘管你的代碼建議八。我會首先在整個代碼中記錄變量和常量的實際含義,因爲您似乎自己在那裏感到困惑。
  • 您檢查board [x]是否爲board [y],但x和y相等,並且您聲稱有重複的數字。
  • 你在不同的皇后之間有所不同。換句話說,你的程序會查找所有皇后如何定位在同一個八個位置上的排列。這並不正確,但效率低下。如果你確定職位數量,那將會產生顯着的差異。
+0

我已經解決了我的問題。你介意看看我的新問題?http://stackoverflow.com/questions/15167672/debugging-n-queens-with-1d-array-and-dumb-algorithm – Chase 2013-03-02 21:55:16