遞迴-回溯法求解8皇后問題(C)

來源:互聯網
上載者:User

無意中翻出了N年前寫的遞迴-回溯法求解8皇后問題,幹粹塞到部落格中吧。

#include <stdio.h><br />#include <conio.h><br />#include <math.h></p><p>#define QUEENS 8 </p><p>// 記錄解的序號的全域變數。<br />int iCount = 0; </p><p>// 記錄皇后在各列上的置放位置的全域數組。<br />int Site[QUEENS]; </p><p>// 遞迴求解的函數。<br />void Queen(int n); </p><p>// 輸出一個解。<br />void Output(); </p><p>// 判斷第n個皇后放上去之後,是否有衝突。<br />int IsValid(int n); </p><p>void main()<br />{<br />// 從第0列開始遞迴試探。<br />Queen(0);<br />} </p><p>//Queen:遞迴放置第n個皇后。<br />void Queen(int n)<br />{<br />int i; </p><p>// 參數n從0開始,等於8時便試出了一個解,將它輸出並回溯。<br />if(n == QUEENS)<br />{<br />Output();<br />return;<br />} </p><p>// n還沒到8,在第n列的各個行上依次試探。<br />for(i = 1 ; i <= QUEENS ; i++)<br />{<br />// 在該列的第i行上放置皇后。<br />Site[n] = i; </p><p>// 如果放置沒有衝突,就開始下一列的試探。<br />if(IsValid(n))<br />Queen(n + 1);<br />}<br />} </p><p>// IsValid:判斷第n個皇后放上去之後,是否合法,即是否無衝突。<br />int IsValid(int n)<br />{<br />int i; </p><p>// 將第n個皇后的位置依次於前面n-1個皇后的位置比較。<br />for(i = 0 ; i < n ; i++)<br />{<br />// 兩個皇后在同一行上,返回0。<br />if(Site[i] == Site[n])<br />return 0; </p><p>// 兩個皇后在同一對角線上,返回0。<br />if(abs(Site[i] - Site[n]) == (n - i))<br />return 0;<br />} </p><p>// 沒有衝突,返回1。<br />return 1;<br />} </p><p>// Output:輸出一個解,即一種沒有衝突的放置方案。<br />void Output()<br />{<br />int i; </p><p>// 輸出序號。<br />printf("No.%-5d" , ++iCount); </p><p>// 依次輸出各個列上的皇后的位置,即所在的行數。<br />for(i = 0 ; i < QUEENS ; i++) {<br />printf("%d " , Site[i]);<br />}</p><p>printf("/n");<br />}<br />

這一演算法求出92種布局。但它們並非本質解,所以輸出的布局當中,有一些經過旋轉、鏡像等變換後是等價的。

如果要求出本質解(應該只有12種),可以考慮將已經求出的布局放在一個鏈表中,然後每次得到一種新的布局時,都跟前面的依次比較一下,看看經過旋轉、鏡像後是否一致,如果一樣則捨棄。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.