【問題描述】
八皇后問題是乙個以西洋棋為背景的問題:如何能夠在 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 輸出若干行,每行乙個種方案,也...