八皇后問題(回溯法)

2021-10-04 03:32:41 字數 1149 閱讀 9146

在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法?

#include

int count =0;

intnotdanger

(int row,

int j,

int(

*chess)[8

])}// 判斷左上方

for( i=row, k=j; i>=

0&& k>=

0; i--

, k--)}

// 判斷右下方

for( i=row, k=j; i<

8&& k<

8; i++

, k++)}

// 判斷左下方

for( i=row, k=j; i>=

0&& k<

8; i--

, k++)}

// 判斷右上方

for( i=row, k=j; i<

8&& k>=

0; i++

, k--)}

if( flag1 || flag2 || flag3 || flag4 || flag5 )

else

}// row 起始行

// n 表示列數

// (*chess)[8] 指向棋盤每一行的指標

void

eightqueen

(int row,

int n,

int(

*chess)[8

])}if

(8== row )

printf

("\n");

}printf

("\n");

count++;}

else*(

*(chess2+row)

+j)=1;

eightqueen

( row+

1, n, chess2 );}

}}}int

main()

}eightqueen(0

,8, chess )

;printf

("共有方法 %d 種\n"

, count)

;return0;

}

八皇后問題(回溯法)

問題描述 八皇后問題是十九世紀著名數學家高斯於1850年提出的。問題是 在8 8的棋盤上擺放8個皇后,使其不能互相攻擊,即任意的兩個皇后不能處在同意行,同一列,或同意斜線上。可以把八皇后問題拓展為n皇后問題,即在n n的棋盤上擺放n個皇后,使其任意兩個皇后都不能處於同一行 同一列或同一斜線上。問題分...

回溯法 八皇后問題

八皇后問題是高斯於1850年提出的,這是乙個典型的回溯演算法的問題。八皇后問題的大意如下 西洋棋的棋盤有8 行 8 列共64個單元格,在棋盤上擺放八個皇后,使其不能互相攻擊,也就 是說任意兩個皇后都不能處於同一行 同一列或同一斜線上。問總共有多少種擺放方法,每一種擺 放方式是怎樣的。首先來分析八皇后...

八皇后問題 回溯法

在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法 就拿四皇后來說吧 我們首先需要建立乙個一維陣列 這個陣列裡存放的就是皇后在該列合適的位置 這個陣列存放的是皇后放的行數,我們首先在第一列中找乙個可以放的地方,很明顯第乙個位置就可以...