Java由淺到深 遞迴學習N皇后問題

2021-08-22 07:17:30 字數 1519 閱讀 5061

借鑑於———

國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法?

對於這個問題,我一開始首先想到是用二維陣列來解決這個問題但是無奈不會。看了大神的**,我感到收益匪淺。。向大神致敬!

好了,這個部落格主要是解決大神**一些較難懂的一些問題。閒話不多說上**ing

首先,下面這段**較容易理解,主要是用for迴圈乙個乙個的暴力解算,把所有的情況都存放到陣列中然後在進行判斷。

注釋:大多自己總結。

package queen;

/* * 第一步:先用for暴力解算

* 演算法思路:主要是但看乙個皇后問題的行或者列然後把行和列所有的可能性都存放在乙個陣列中。

* 不分原因直接去乙個乙個的去試。一共計算8的8次方

*/public class queen_1}}

return true;

} public static void main(string args)

system.out.println();

count++;}}

}}}}

}}

}//輸出一共有多少種情況。

system.out.println(count);

}}

為了讓讀者更好的理解回溯法意思,這一段**更好的解釋了什麼是回溯法的意思↓

package queen;

/* * 第二步:中間穿插 if continue簡單的實現回溯法的一些基本思想

* :和第一步的思想差不多就是 每乙個步都要比較一次,這樣可以及時發現不對,如果返回false就結束本輪迴圈,

* 節省時間,提高的效率

*/public class queen_2

return true;

} public static void main(string args)

system.out.println();

count++;}}

}}}}

}}

}system.out.println(count);

}}

理解完什麼是回溯法,接下裡就是用遞迴來實現上面的**了,回溯法就是一行一行的比不行就回頭在進行比較,而不是像第乙個**那樣不分青紅先遍歷出來再說。

package queen;

public class queen

return 1;

} static void backtrack(int k)

system.out.println();

count++;

}else

}}

} public static void main(string args)

}

總結:通過學習大神的**,了解了回溯法遞迴的一些常用方法,更加了解了陣列用法,不說了掉了幾根頭髮了。。。。

由淺到深理解ROS(3) 命名空間

rosout前面的反斜槓 表明該節點名稱屬於全域性命名空間。之所以叫做全域性名稱因為它們在任何地方 包括 命令列工具 圖形介面工具等的任何地方 都可以使用。無論這些名稱用作眾多命令列工具的引數還是用在節點內部,它們都有明確的含義。這些名稱從來不會產生二義性,也無需額外的上下文資訊來決定名稱指的哪個資...

由淺到深玩轉Python爬蟲 一 初識爬蟲

由於自身對爬蟲技術的熱衷以及在爬蟲領域踩坑多年的經驗,決定綜合爬蟲領域的技術及我個人的經歷寫成一系列由淺到深的爬蟲技術文章,希望以最簡單方式 最實用的方式為爬蟲初學者帶來學習上的幫助 對從事爬蟲領域的工程師帶來新的感官 其實最大的初衷則是為未來的自己留下曾經在這個領域待過的足跡!後續的章節中會覆蓋爬...

由淺到深理解ROS(3) 命名空間

rosout前面的反斜槓 表明該節點名稱屬於全域性命名空間。之所以叫做全域性名稱因為它們在任何地方 包括 命令列工具 圖形介面工具等的任何地方 都可以使用。無論這些名稱用作眾多命令列工具的引數還是用在節點內部,它們都有明確的含義。這些名稱從來不會產生二義性,也無需額外的上下文資訊來決定名稱指的哪個資...