八皇后問題及控制台動態演示

2022-08-26 12:00:16 字數 2231 閱讀 9761

在解決這一問題上回溯法變得很有用,回溯法形象點說有點像走迷宮,當這條路走不通時,退回上一次的狀態,尋找另乙個方向繼續走下去。

在程式設計過程中,過程型語言講究模組化設計,物件型語言則主張一切皆物件,愚以為二者並非完全對立的兩種狀態,準確點說應該是,在將一切物件化的過程,問題的解決要模組化,以八皇后問題為例,我們可以設計乙個eightqueen類,此為物件化,而eightqueen類內部的問題解決過程則要遵循模組化,解決八皇后問題首先我們需要乙個可以判斷在某個位置放皇后是否符合條件的函式,然後還需要可以進行回溯於遞迴的函式,如果還想動態化地演示過程,則還需要乙個輸出函式,這就是模組化的過程。(這段純屬廢話了)

進入正題,判斷皇后都不在同意列上很簡單,判斷不在同一對角線上也不難,不過分為兩種情況:正斜對角線和反斜對角線,判斷條件分別為:(r1+c1)==(r2+c2),(r1-c1)==(r2-c2),知道了判斷條件,就可以進行函式設計了(我定義了乙個全域性陣列queen用來記錄每個皇后的位置,還定義了全域性變數_count用於記錄所有情況的總數,但我並沒有將棋盤可以翻轉這個因素考慮進**,所以最後可能會出現一種擺法轉個90度就與另一種擺法相同的結果,在這裡不直接用count而用_count的原因是命名空間std裡有count的定義了,編譯會報錯):

1

bool is_meet(int row,int

col)

10 queen[row] =col;

11return1;

12 }

接下來是承當回溯與遞迴職能的函式的設計,比較好理解,就不進行過多解釋:

1

void findqueenposition(int

row)

7else10}

11}12 queen[row] = -1;13

return

;14 }

為了在控制台動態的演示出過程,我們需設計一下display()函式,在顯示過程中為了讓我們可以捕捉到變化,我們需呼叫sleep()庫函式將停留時間變長,sleep()庫函式呼叫需包含標頭檔案,同時也為了實現動態,我們要將舊的輸出清零,這就需要用到system("cls")語句,該語句可以將控制台所有輸出清零,**如下:

1

void

display()

10else

14 cout << "# "

;15for (int k = queen[i] + 1;k < 8;k++)

18 cout <20}

21 sleep(100);//

停留時間可以自行更改

22 }

既然加入了輸出函式,那findqueenposition()函式也要做出些許變化,修改完如下:

1

void findqueenposition(int

row)

10else14}

15}16 queen[row] = -1;17

return

;18 }

到這裡這個程式就基本完成了,為了便於執行,我將完整**貼在下面:

1 #include 2 #include 3

using

namespace

std;45

int queen[8]=;

6int _count = 0;7

8bool is_meet(int row,int

col)

17 queen[row] =col;

18return1;

19}2021

void

display()

30else

34 cout << "# "

;35for (int k = queen[i] + 1;k < 8;k++)

38 cout <40}

41 sleep(100);//

停留時間可以自行更改42}

4344

void findqueenposition(int

row)

53else57}

58}59 queen[row] = -1;60

return;61

}6263int

main()

經過簡單的測試,**應該是沒問題了,但仍可能會有錯誤出現,歡迎指正。

控制台介面控制(八) 游標設定

游標的作用在於提醒使用者,你的輸入將會在這個位置出現。目前對於游標的操作只有乙個,移動游標,改變輸出的位置。有時候游標在那裡一閃一閃的是不行的,比如做了乙個選單,或者乙個封面。可以在控制台使用的函式中有乙個可以用來隱藏游標,除此之外,它在游標顯示的時候還能設定游標的厚度。效果 相關資訊 設定游標顯示...

npm 控制台動態輸入引數

package.json 中 scripts 目的想要公升級某個外掛程式,要麼公升級到最新版本 要麼公升級到指定版本 實際執行的命令如下 npx p upgrade 無版本號,即公升級到最新版本 npx p upgrade 1.2.3 1.2.3表示版本號,即公升級到1.2.3版本 控制台簡單的輸入...

IDEA控制台亂碼問題

今日開啟idea,發現控制台中文總是顯示亂碼,不利於進行專案除錯與 相關資訊的檢視,於是踏上了漫漫的修改之路,最後發現了以下的方法 開啟intellij的安裝的bin目錄 d program files jetbrains intellij idea 14.0 bin 找到上圖的兩個檔案 根據你的系...