最近看到遞迴,原本利用回溯思想解決的經典八皇后問題,其實也是可以用遞迴解決的~
八皇后的遞迴解決思路:
從第一行開始,依次判斷0~8列的哪一列可以放置queen,這樣就確定了該行的queen的位置,然後行數遞增,繼而遞迴實現下一行的判斷,依次類推直到行數增加到8(行數從0開始的),此時為遞迴-----歸的條件,即表示一種八皇后的解決方法完成,列印結果;之後進行下一種解決方法的尋找,大致思路個人理解是這樣
nodanger(row,j,(*chess)[8])函式是判斷第row行第j列是否可以放置queen
#include int count=0;
int nodanger(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<8&&k>=0;k--,i++)
}//判斷右上方
for(i=row,k=j;i>=0&&k<8;k++,i--)
}if(flag1||flag2||flag3||flag4||flag5)
else
}//引數row表示起始行 引數n表示列數 引數(*chess)[8]表示指向每一行的指標
void eightqueen(int row,int n,int (*chess)[8])
}if(row==8)
printf("\n");
}printf("\n");
count++;
}else
{//依次判斷每一列
for(j=0;j
八皇后問題的兩種解法
八皇后問題,是回溯演算法 的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8x8格的西洋棋 上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。1854年在柏林 的象棋雜誌上不同的作者發表了40種不同的解,後...
python八皇后問題的解決方法
題目 給定乙個 n n 正方形棋盤,在上面放置 n個棋子,又叫皇后,使每兩個棋子都不在同一條橫線上 豎線上 斜線上。一般我們都討論8皇后,但是只要n 4,都會存在解的。分析 方法1 根據定義來處理,即每往棋盤中放置皇后的時候,都要判斷哪些位置可以放新加入的皇后,而哪些地方如果放置皇后的話,會造成衝突...
開關燈問題兩種解決方法
有編號1 100個燈泡,起初所有的燈都是滅的。有100個同學來按燈泡開關,如果燈是亮的,那麼按過開關之後,燈會滅掉。如果燈是滅的,按過開關之後燈會亮。現在開始按開關。第1個同學,把所有的燈泡開關都按一次 按開關燈的編號 1,2,3,100 第2個同學,隔乙個燈按一次 按開關燈的編號 2,4,6,10...