2011-03-30 53 views
0

可能重複:
Dumb 8 Queens problem in C++問計算法解決八個皇后問題

嗨 我來到這個問題 **

寫一個算法,在棋上安排8位國王打印所有方式 板不讓任何人一樣 行,列,對角線

**

//initialize chess[i][j] to 0; 
int king=100; //any other number except 0/1 

for(i=0;i<8;i++) 
{ 
for(j=0;j<8;j++) 
{ 
//select any one position for the first column... lets start with j=0,i=0 
if(chess[i][j]!=1) 
chess[i][j]=king; 
//now we should cross all rows with value i and column with value j 
chess[i][]=1; 
print(when chess[][]=king) 
// we cannot enter king if chess[][]=1 

} 
} 

如何檢查對角線的部分呢?如何列舉所有可能的情況?

感謝進階..

+6

嗯,你的意思是皇后。 – ripper234 2011-03-30 13:27:54

+3

我想你想要8皇后問題。這是所有地方,維基百科[8皇后](http://en.wikipedia.org/wiki/Eight_queens_puzzle) – NealB 2011-03-30 13:42:30

+1

所有解釋不認爲這應該已經被關閉 - 至少,從看着建議的重複它涵蓋了一個單獨的問題,對此問題的答案几乎沒有幫助。一般來說,對於較大問題的解決方案只有在有人陷入特定子問題時纔有理論上的幫助 - 努力閱讀較大的答案並提取所需的一小部分信息可能超出了海報。 – 2011-03-30 15:19:28

回答

1

爲了回答特定問題:

棋盤上的對角移動總是從(M,N)至(m +/- K,N +/- K);即您垂直移動儘可能多的空間。因此,要檢查兩個皇后,一個(i,j)和一個(p,q)是否對角攻擊對方,請檢查abs(i-p) == abs(j-q)

劃掉,可以通過對(P,Q)女王對角攻擊所有的廣場,你需要的形式

for (i = p, j = q; i >= 0, j >= 0; i--, j--) { board[i][j] = 1 } 

for (i = p, j = q; i >= 0, j < 8; i--, j++) { board[i][j] = 1 } 

for (i = p, j = q; i < 8, j < 8; i++, j++) { board[i][j] = 1 } 

for (i = p, j = q; i < 8, j >= 0; i++, j--) { board[i][j] = 1 } 

是四個環,你走在x的所有四個武器中心在你的女王身上,穿出廣場直到你撞到棋盤的邊緣。