八皇后問題

2022-09-11 19:27:14 字數 1202 閱讀 8462

八皇后問題絕對是乙個經典的演算法題,自己寫了一遍,有點感悟,就寫了下來:

這是我所寫的**,好不好不知道,但確實這個問題解決了:

1     #include 2

static

int sum=0;//

用於計算排列方式的個數

3int nodanger(int row,int col,int(*p)[8])9

for(j=0;j<8;j++)

13if(((i-row)==(j-col)||(i-row)==(col-j))&&(*(p[i]+j))==1

) 14

//判斷對角線上是否存在皇后

151819}

2021}22

return1;

23}24//

列印排列

25void print_chess(int(*p)[8

])31 printf("\n"

);32}33

34}3536

37int tryput(int row,int(*p)[8

])44}45

for(j=0;j<8;j++)

54 tryput(row+1

,fatechess);

55 fatechess[row][j]=0;56

if(j<7)59

6061 }else

6566}67

}6869int initchess(int(*p)[8

])77}78

return0;

79}8081

int main(void

)90

其實:該演算法只要想通以下幾點:

1,這個位置能不能放   由函式nodanger()判斷;

2,能放的話那就把它拷貝乙份用於實念,並把這個地方設成皇后,然後在進行下行位置的檢測,與嘗試,

如果嘗試成功,就繼續嘗試,否則的話就將所設的最後乙個皇后抹除,並進行下個位置嘗試;

如果不能放的話,那就繼續迴圈檢測下乙個(continue);

3,什麼時候停:對於遞迴函式tryput()的引數row記載的是已經放了皇后的行數,即皇后的個數-1

當row=7時即可停下,並列印!

只要想通的這個過程,就可舉一反三,多少皇后也不是問題了,呵呵!

八皇后問題

八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...

八皇后問題

include iostream.h int a 8 8 棋盤 int r 8 結果 int i,j int count 0 void init i j 0 int judge int x,int y for int mi x 1,mj y mi 1 mi for int ri x 1,rj y 1...

八皇后問題

package quess 由於八個皇后的任意兩個不能處在同一行,那麼這肯定是每乙個皇后佔據一行。於是我們可以定義乙個陣列columnindex 8 陣列中第i個數字表示位於第i行的皇后的列號。先把columnindex的八個數字分別用0 7初始化,接下來我們要做的事情就是對陣列columninde...