八皇后演算法的另一種實現 c 版本

2022-01-24 04:27:36 字數 796 閱讀 2929

八皇后:

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。計算機發明後,有多種計算機語言可以解決此問題。

圖示:

我的解決方案:

網上有大量的方法,大部分抽象難以理解,並且有知乎大神整理出了10行**的版本,一時間驚為天人,眾人錯愕。

如何用 c++ 在 10 行內寫出八皇后?

你如果看得懂各路大神裝的逼,可以關閉本文章了。

現在給出我的個人版本,演算法過程描述的比較詳細,並且加入了大量注釋,尤其是流程控制方面的註解比較多,方便理解。演算法核心部分是基於已定位置的未知位置計算。本次實現方式並非是效率最高的方式,但是對於剛剛接觸這個演算法,而又整理不出思路的人來說,很有幫助。

結果如圖:

原始碼如下:八皇后

Dijkstra演算法的另一種證明

按 今天看tanenbaum的計算機網路時講到了dijkstra演算法。關於演算法的正確性,演算法導論 給出了嚴格的證明。clrs的證明基於乙個通用的框架,非常清晰。今天只是隨意想想是否有其他證明的方式,結果發現是有的。雖然這種證明方法可能早已有人用過,不算新鮮。不過自己想了一通就把它放到這裡純粹博...

Dijkstra演算法的另一種證明

按 今天看tanenbaum的計算機網路時講到了dijkstra演算法。關於演算法的正確性,演算法導論 給出了嚴格的證明。clrs的證明基於乙個通用的框架,非常清晰。今天只是隨意想想是否有其他證明的方式,結果發現是有的。雖然這種證明方法可能早已有人用過,不算新鮮。不過自己想了一通就把它放到這裡純粹博...

C 基數排序另一種實現

這個版本的基數排序和演算法導論的不太相同,思想都是一樣的,但是感覺比那個好理解很多 選用unsigned int 也就是u32 作為例子,按位來,一共只有兩個桶,所以要比32次。但其實基數排序非常有意思。在於這些都是可變的 設待排序列為n個記錄,d個關鍵碼,關鍵碼的取值範圍為radix,排序時間複雜...