八皇后問題(C語言)

2021-10-01 03:16:29 字數 1501 閱讀 3029

【問題描述】

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

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

【輸入形式】

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

【輸出形式】

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

【輸入樣例1】

481*7263

【輸出樣例1】

【樣例1說明】

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

【輸入樣例2】

1526374*

【輸出樣例2】

no answer

【樣例2說明】

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

#include

#include

int hashtable[9]

=;intmain()

else

col = i;

//未輸入的皇后所在列數

}for

(j =

1; j <=

8; j++

)int flag =1;

for(i =

1; i <=

8&& i != col; i++)}

if(flag)

printf

("%d"

, t)

;else

printf

("no answer");

return0;

}

八皇后問題 C語言

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

c語言八皇后問題

在西洋棋裡面,皇后是最具有殺傷力的 它可以對它的十字形和對角線元素進行攻擊。八皇后問題就是在8 8的棋盤上的每一行都放置乙個皇后,使他們無法進行互相攻擊 思路 1.編寫乙個函式,將乙個皇后放在第一列,如果存在攻擊就把皇后放在第二列,如果每列都存在互相攻擊的情況,則這個函式返回 2.若皇后可以放在這個...

八皇后問題c語言演算法

目錄 toc 相信八皇后規則的問題,大家都很熟悉,接下來是如何分析回溯法的應用。回溯法與圖裡面的深度優先遍歷非常的類似,就是,在滿足題目條件時候,它總是優先選擇第乙個,當不滿足的時候,它會選擇接下來的乙個點,通常會用遍歷陣列的方式。總體的 構建如下 void fun n 每次填滿第一行第一列,當不滿...