#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個皇后,要使得任意兩個皇后之間不能相互攻擊,規則是任意兩個皇后處在同一行,同一列或者同一斜線的位置上時,能夠相互攻擊,皇后可以走任意步。通過分析題目可以知道,若使任意兩個皇后都不能互相攻擊,那麼就必須使得任意兩個皇后不能處在同一行,同一列,同一斜線即可 隱藏條...