畢業生求職必會算法 八皇后問題

2021-03-05 揚帆向海
寫在前面:我是 「揚帆向海」,我熱愛技術、熱愛開源、熱愛編程。技術是開源的、知識是共享的。用知識改變命運,讓我們的家人過上更好的生活。一、問題描述

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

相信大家都玩過 死亡八皇后遊戲,下面是我玩在線遊戲錄的屏。

二、問題分析

目的:8×8 格的西洋棋上擺放八個皇后

規則:任意兩個皇后都不能處於同一行、同一列或同一斜線上

由於任意皇后不能同行,因此每一行最多放一個皇后;由於行數等於皇后數,因此每一行至少要一個皇后。

結論:每一行一定是放一個皇后

三、實現邏輯

① 首先把第一個皇后放在 8×8 格西洋棋的第1行第1列

② 接下來放第二個皇后,嘗試放在第二行第一列,然後判斷是否滿 足規則,如果不滿足,繼續嘗試放在第二列、第三列...嘗試把所有的列的位置全部放完,找到一個合適的放置位置。

③ 繼續放第三個皇后,放置過程和第②步同理。

. ...

④ 依次類推,放第四個、第五個、第六個、第七個、第八個皇后

⑤ 通過以上過程得到一個正確的擺放方案時:

嘗試把第八個皇后移動擺放位置,看有沒有其它擺放方式;

嘗試把第七個皇后移動擺放位置,看有沒有其它擺放方式;

嘗試把第六個皇后移動擺放位置,看有沒有其它擺放方式;

 . ...

依次類推,把第五個、第四個、第三個、第二個皇后移動位置,看有沒有其它擺放方式。

    這樣就得到了把第一個皇后放在第一行第一列所有可能性

⑥ 然後回頭將第一個皇后放到第二列,繼續循環執行上面的步驟 ①、②、③ 、④ 、⑤

在此過程中使用到了回溯算法的思想,從一條路往前走,能進則進,不能進則退回來,換一條路再試。八皇后問題就是回溯算法的典型,第一步按照順序放一個皇后,然後第二步符合要求放第2個皇后,如果沒有位置符合要求,那麼就要改變第一個皇后的位置,重新放第2個皇后的位置,直到找到符合條件的位置就可以了。

回溯在 迷宮搜索問題 中使用很常見,就是這條路走不通,然後返回到前一個路口,繼續走下一條路。

四、擺放圖示

在這裡只演示把第一個皇后放在第一行第一列的情況:

第一種:

第二種:

第三種:

第四種:

五、代碼實現

使用一個一維數組表示皇后的位置,其中數組的下標表示皇后所在的行,也就是第幾個皇后,數組元素的值表示皇后所在的列。

package com.study.algorithm;
public class EightQueens { static final int COUNT = 8;
static int[] array = new int[COUNT]; static int sum = 0;
public static void main(String[] args) { putQueen(0); System.out.println("八皇后總共有" + sum + "種擺放方案"); }
public static void putQueen(int n) { if (n == COUNT) { System.out.print((sum + 1) + "、八皇后的擺放位置是:"); for (int i = 0; i < COUNT; i++) { int pos = array[i] + 1; System.out.print(pos + " "); } System.out.println(); System.out.print("擺放位置如下圖所示:"); printPlace(); return; } else { for (int i = 0; i < COUNT; i++) { array[n] = i; if (checkPlace(n)) { putQueen(n + 1); } } } }
public static void printPlace() { System.out.println(); sum++; for (int i = 0; i < COUNT; i++) { System.out.print(" "); for (int j = 0; j < COUNT; j++) { System.out.print("---"); } System.out.println(); for (int k = 0; k < COUNT; k++) { if (k == array[i]) { System.out.print("|" + "♛"); } else { System.out.print("| " + " "); } } System.out.println("|"); } System.out.print(" "); for (int i = 0; i < COUNT; i++) { System.out.print("---"); } System.out.println(); }
public static boolean checkPlace(int n) { for (int i = 0; i < n; i++) { if (array[i] == array[n] || Math.abs(n - i) == Math.abs(array[n] - array[i])) { return false; } } return true; }}

代碼執行結果:

總共有 92 種擺放方案,由於篇幅有些,在此只截取了兩種方案。

由於水平有限,內容難免有不足,懇請各位大佬不吝賜教!

公眾號: 程序猿編程

長按下圖二維碼關注,獨自前進,走得快;結伴而行,走得遠;在這裡除了肝出來的文章,還有一步一個腳印學習的點點滴滴。

原創不易,順便點個、點一下「在看」,和揚帆一起成長吧!搬磚的路上我們一起努力

相關焦點

  • AI 求職季啟動:阿里、商湯等八大明星企業資深算法工程師親授獨門...
    因其較好的發展前景和出名的「高薪」,許多畢業生和IT從業者在擇業時也開始將 AI 行業納入考慮範圍。但作為一個新興行業,求職者對於 AI 行業的工作要求存在許多盲點,例如,行業內有哪些 AI 崗位?它的「高薪」究竟是怎麼樣的?如何做好求職定位與職業規劃?如何快速適應 AI 工程師的工作?
  • 2020年高校畢業生求職研究|新一輪內卷即將到來了嗎?
    多平臺頻繁投遞,習慣於直聊、直聘模式 高校畢業生每天忙於應聘求職,超八成的人每天都會在求職平臺多次投遞簡歷同時,高校畢業生並沒有單純依賴某個求職平臺,同時使用多個平臺進行求職成為常態,同時使用2個求職平臺的比重達到57.9%,同時使用3個求職平臺的比重達到27.7%。
  • 874萬應屆畢業生疫情下的求職路
    「今年已經參加筆試和面試的應屆畢業生總體表現很好,但是我們能很明顯地感覺到學生求職的意願更強,比往年學生與企業的溝通更主動。在洽談入職時,以前有很多學生會說想先跟著導師做項目或是把畢業論文完成,等畢業後7至8月再入職,但今年有更多的學生願意在畢業前先到崗實習。」
  • @畢業生 求職的小帆揚起來!事業的夢想創起來
    2021屆的畢業生們也迎來了求職高峰期。近期湖北省內有哪些針對畢業生的招聘會?都有哪些企業參與?哪些崗位最熱門?求職應該做好哪些準備?主要針對2020、2021屆高校畢業生、有就業意願的往屆離校未就業畢業生,同時也面向「三支一扶」等基層服務項目期滿而還未就業的高校畢業生。
  • 影視畢業生求職路上時刻在線
    記者採訪到三位影視專業應屆畢業生,他們雖處在求職的不同階段,但都在行業「逆風」中奮力前行。籤了合同卻無活兒可幹在收到學校不返校通知的前幾天,關巧巧趕回北京,在三裡屯一家民宿租下房子,開始了線上工作的生活。作為某知名影視院校戲劇影視導演專業學生,關巧巧雖然已經在國內一家頭部電影公司找到了工作,但仍然感到有些焦慮。「我們這屆畢業生真的太難了。
  • 這6類高校畢業生、中職畢業生看過來 有份求職創業補貼等你領
    記者從舟山市人力資源和社會保障局了解到,為進一步加強對困難畢業生的幫扶,提升畢業生就業質量,根據《浙江省人力資源和社會保障廳等5部門關於做好求職創業補貼發放工作的通知》,舟山市於11月5日起正式啟動求職創業補貼發放工作。
  • 河南困難畢業生求職創業補貼來了,符合條件每人可領2000元
    符合條件的困難畢業生按每人2000元的標準一次性發放,用於困難畢業生在求職創業過程中的相關費用補助。歡迎符合條件的畢業生積極申報!  據記者了解,《通知》明確了補貼對象與範圍。  在申領發放程序及時間安排上,2020屆困難畢業生求職創業補貼應於2020年3月底前發放到位,2021屆困難畢業生求職創業補貼發放工作應於2020年10月底前完成。補貼由困難畢業生提出申請,所在學校初審,學校所在省轄市(直管縣市)人社部門會同相應職能部門審核匯總,所在學校公示後報同級財政部門核撥。
  • 八維教育助力畢業生開啟職業道路 走向新明天
    八維教育自成以來就以社會需求為導向,注重培養高素質實用性人才,現開設有人工智慧專業、軟體工程專業、大數據專業、網絡工程專業、高級翻譯專業等,其中高級翻譯專業秉承「用心在背、悟心在忘、經驗傳承」的教學理念以及「純語境」的教學法,不斷創新教學方式,提高學生的學習效率,促進畢業生優質畢業。近日,一則高翻專業學生優質就業的喜訊在八維教育高級翻譯專業各個微信群裡廣為傳播。
  • 來仲愷求職的高校畢業生請注意!您的交通、住宿補貼可申請啦!
    來仲愷求職的高校畢業生請注意!您的交通、住宿補貼可申請啦! 來源:澎湃新聞 政務 應屆高校畢業生還在愁求職路上
  • 求職路四個「含金量」高的地方,有人面試花幾萬,畢業生直呼費錢
    畢業生在求職之路,一般都少不了這些開支雖然不同的人花錢習慣不同,有的大手大腳,有的比較節儉,但下面這幾類支出,幾乎是大多數本科或者碩士畢業生在求職過程中必不可少的花費。首先就是交通費。多數求職者花在高鐵、火車、飛機之類的出行工具上的錢還是不少的,畢竟,有很大一部分找工作的學生會給全國各地適合自己的公司投簡歷,而簡歷通過後,他們又不願意錯過每一次機會。
  • 應屆畢業生求職圖鑑:從焦慮走向理性,「騎驢找馬」心態者多
    受新冠肺炎疫情等多重因素影響,2020屆高校畢業生就業形勢嚴峻複雜。而在2020屆高校畢業生還沒從「最難就業季」中緩過神來時,2021屆高校畢業生已加入求職大軍。因此,高校畢業生就業問題受到高度的關注和重視。
  • 建議「飲」下畢業生求職這碗「毒藥」——《何者》日劇日影
    「何者」( nanimono) :什麼人電影開始男主角提出一個問題:「我們要成為什麼樣的人?」同時,也向觀眾發出了同樣的疑問:「我是誰,誰又是我?」搜索求職信息,各處投簡歷,參加筆試、面試,列印名片, 推銷自己等等求職方式,這是所有畢業生都要共同面臨的。「身邊的朋友都在準備出社會,大家都在加油,我也會加油」,我們必須承認現實是多麼殘酷。一方面,厭倦了在各種招聘會上奔波,另一方面,在自己的社交APP上更新近況希望其他人看到自己仍然熱愛生活,其實在不停的與內心做掙扎。
  • 威海市人社局:高校畢業生就業創業政策全知道—求職創業補貼和「三...
    威海市人社局:高校畢業生就業創業政策全知道—求職創業補貼和「三支一扶」計劃 2020-12-15 17:39:37| 來源:威海市人社局 高校畢業生就業創業,關係千萬家庭幸福,關係財富創造、高質量發展。
  • 2021屆畢業生求職創業補貼啟動申報,6類情況可領千元
    北京地區院校2021屆畢業生一次性求職創業補貼申報工作啟動啦!申報截止時間為10月15日,補貼標準為1000元/人。此次申報對象為有求職創業意願的2021屆畢業生,符合以下六類情況之一即可申請:1.所在家庭享受城鄉居民最低生活保障待遇的;2.所在家庭為國家認定的建檔立卡貧困家庭的(北京戶籍畢業生所在家庭為低收入農戶的);3.所在貧困家庭中父母一方持有《中華人民共和國殘疾人證》的;4.本人持有《中華人民共和國殘疾人證》的;5.本人在畢業學年內獲得國家助學貸款的
  • 去香港找工作必上的5大求職網站!
    根據香港非本地畢業生留港/回港就業安排,在香港就讀的非本地畢業生可申請IANG籤證,留港1年尋找工作,滿足在港通常性居住7年的條件後方可申請永居。香港職位申請途徑有哪些?這是準備在香港找工作的朋友問到最多的問題,銀河君針對這一點,結合香港找工作的形勢,下面進行詳細解答。
  • @山東2020屆湖北籍高校畢業生 1000元/人求職創業補貼6月30日前...
    齊魯網·閃電新聞6月3日訊 為幫助湖北籍全日制普通高等學校畢業生儘快實現就業創業,近日,山東省人力資源和社會保障廳、山東省教育廳、山東省財政廳聯合印發《關於做好2020屆湖北籍高等學校畢業生求職創業補貼發放工作的通知》,對有就業意願、積極求職的湖北籍2020屆全日制普通高等學校畢業生發放求職創業補貼
  • 2021年畢業生太難了,求職別被忽悠了,畢業後第一份工作很重要
    文|一凡2021屆大學畢業生很多還在為求職奔波著。因為疫情,大學畢業生的就業形勢一年比一年艱難。現在很多學校或者企業招人,不是要求985、211,就是要求研究生以上學歷,搞得一些普通本科大學的大四畢業生應聘時不斷受挫,對前途一片茫然。
  • 企業招聘時最喜歡什麼樣畢業生
    本報記者採訪省內12所高校負責就業的老師和部分企業的HR,採用同題問答的形式,為「企業最喜歡的畢業生」畫素描像!  問題一:用人單位是否看中求職者的學歷?  答:技術研發崗位對學歷要求高  參與本報調查的八成老師認為,對於求職者來說,學歷是門檻。
  • 年薪最高80萬搶應屆畢業生
    港中大(深圳)金融工程碩士生成了「香餑餑」  受疫情影響,高校畢業生就業面臨較大挑戰。但日前發布的香港中文大學(深圳)2020屆金融工程理學碩士項目畢業生就業報告卻顯示,該專業2020屆畢業生的就業率為97.4%,平均年薪為29.5萬元,最高值達到了80萬元,就業率及平均薪酬均位於國內知名高校前列。
  • 東華大學應屆畢業生鄧雯求職成功,師生:了不起!沒人比他更難了
    應屆大學畢業生人數遠超往年,如果再加上去年沒找到工作的大學生人數,求職大學生的數量驚人;今年受疫情影響,不僅畢業工作受到嚴重影響,招聘工作影響更是大,許多招聘現場會都無法舉辦。這些都給大學畢業生們帶來了許多困擾。