簡單的八皇后問題(C )

2021-10-04 07:50:30 字數 1767 閱讀 2205

【問題描述】

八皇后問題是乙個以西洋棋為背景的問題:如何能夠在 8*8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后。為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上,如下圖:

假如一棋盤已經正確放置了七個皇后,編寫程式求解最後乙個皇后的放置位置。

【輸入形式】

按照棋盤行由小到大的順序從控制台輸入已正確放置的皇后的列數(列數從1開始計數),未放置皇后的行以字元「」表示。各列數和字元「」之間沒有任何其它字元分隔,在輸入末尾有回車換行符。例如:上圖棋盤假如第4行沒有放置皇后,其它七個皇后都已放置完畢,則輸入的形式為:368*4752。

【輸出形式】

在標準輸出上輸出最後乙個皇后應該放置的列數(列數大於等於1,小於等於8,列數後的回車換行可有可無)。若無解,則輸出字串:no answer。

【輸入樣例1】

3681*752

【輸出樣例1】

【樣例1說明】

根據輸入樣例,在棋盤的第一行、第三列位置放置了一皇后,同樣在第二行、第六列,第三行、第八列,第四行、第一列,第六行、第七列,第七行、第五列,第八行、第二列也分別放置了一皇后,第五行沒有放置皇后。那麼為了滿足八皇后問題的要求,我們只有在第五行、第四列放置一皇后,所以輸出列數為4。

【輸入樣例2】

1357246*

【輸出樣例2】

no answer

【樣例2說明】

根據輸入樣例,在棋盤的第一行、第一列,第二行、第三列,第三行、第五列,第四行、第七列,第五行、第二列,第六行、第四列,第七行、第六列分別放置了一皇后,第八行沒有放置皇后。但是根據八皇后問題的要求,前七個皇后放置之後,第八行任何位置都不能放置皇后,否則就會被吃掉。所以輸出:no answer。

【評分標準】

#include

using

namespace std;

int num[9]

[9];

int row,col;

int mark;

void

set(string str)

;for

(int i=

1;i<

9;i++

)for

(row=i,col=

int(ch[i]-48

);(row!=9)

&&(col!=9)

;row++

,col++

)for

(row=i,col=

int(ch[i]-48

);(row!=9)

&&(col!=0)

;row++

,col--

)for

(row=i,col=

int(ch[i]-48

);(row!=0)

&&(col!=9)

;row--

,col++

)for

(row=i,col=

1;col<

9;col++

)for

(row=

1,col=

int(ch[i]-48

);row<

9;row++)}

else mark=i;}}

intmain()

}if(i==

9) cout<<

"no answer"

;}

八皇后問題(簡單回溯)

隨心而記,以供追憶 1,問題描述 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯1850年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。2,解決方式 由於本問題只有八皇后擺放,...

八皇后問題 C

八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n1 n1,而皇后個數也變成n2。而且僅當 n2...

八皇后問題(C )

description 相信大家都聽過經典的 八皇后 問題吧?這個遊戲要求在乙個8 8的棋盤上放置8個皇后,使8個皇后互相不攻擊 攻擊的含義是有兩個皇后在同一行或同一列或同一對角線上 桐桐對這個遊戲很感興趣,現在他想知道每種合法 的擺放方案.input 無output 輸出若干行,每行乙個種方案,也...