八皇后問題,遞迴法

2021-07-11 09:58:35 字數 822 閱讀 1588

#include#includeint count = 0;//成功的次數

//判斷在對角線或者同行同列上是否有皇后

int notdanger(int row,int j,int (*chess)[8])

} //同列

for(int i = 0;i<8;i++) }

//判斷左上方

for(int i =row,k = j;i>=0&&k>=0;i--,k--) }

//判斷右下方

for(int i =row,k = j;i<8&&k<8;i++,k++) }

//判斷右上方

for(int i =row,k = j;i>=0&&k<8;i--,k++) }

//判斷左下方

for(int i =row,k = j;i<8&&k>=0;i++,k--) }

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

else }

//引數row表示起始行,col表示列數,(*chess)[8]表示指向棋盤每一行的指標

void eightqueen(int row,int col,int (*chess)[8])

printf("\n");

} printf("\n");

count++;

} else

*(*(chess2+row)+j) = 1;//該位置不危險

eightqueen(row+1,col,chess2);

}} }

}int main()

遞迴法求解八皇后

八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯1850年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線 對角線 上,問有多少種擺法。主要思路 一行一行得擺放皇后,直到第7行 作為遞迴結束條件 初始...

八皇后問題之遞迴法求解

八皇后問題是十九世紀著名的數學家高斯於1850年提出 在8x8格的西洋棋 上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案,1854年在柏林 的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果,對於...

遞迴法解決N皇后問題

n皇后問題 在乙個n n的棋盤上面放置n個皇后,要使得任意兩個皇后之間不能相互攻擊,規則是任意兩個皇后處在同一行,同一列或者同一斜線的位置上時,能夠相互攻擊,皇后可以走任意步。通過分析題目可以知道,若使任意兩個皇后都不能互相攻擊,那麼就必須使得任意兩個皇后不能處在同一行,同一列,同一斜線即可 隱藏條...