八皇后問題 C 遞迴

2021-08-15 13:34:09 字數 965 閱讀 1259

最近在重新看遞迴,準備複試,剛好看到八皇后問題。

遇到的問題主要有兩大方面:

1.迴圈實現放皇后對相應方格的置1操作,要注意迴圈條件,考慮4種情況。

2.遞迴中的迴圈邏輯。見**注釋。

另外,由於進入遞迴起始的位置是給定的(0,0),需要在主函式內迴圈實現對第0行所有位置的遞迴求解。這一點也是看了好久,通過遞迴層數計數才發現。

#include #include using namespace std;

//八皇后問題

int table[8][8] = {};

int count = 0;

typedef enum arg

ctr;

int countdg;//遞迴層數計數

void setrowlinediag(int x,int y,ctr arg);

void eightq(int x,int y);

void copyarray(int (*array_temp)[8],int (*table)[8]); //陣列指標

void coutarray(int (*array)[8]);

int main()

; copyarray(array_temp,table);

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

cout<=7)//左斜線

}else if(s<7)

}if(x>=y)//右斜線

else

}void copyarray(int (*array_temp)[8],int (*table)[8]) //陣列指標

}void coutarray(int (*array)[8])//輸出棋盤

{ int i,j;

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

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

cout<=8)//已超邊界,無解

return ;

// cout<

八皇后問題 遞迴

問題描述 在乙個8 8西洋棋盤上,有8個皇后,每個皇后佔一格 要求皇后間不會出現相互 攻擊 的現象,即不能有兩個皇后處在同一行 同一列或同一對角線上。問共有多少種不同的方法。程式 public void testeightprince 初始化,所有的位置都可以放置乙個皇后 for int x 0 x...

八皇后問題 遞迴

八皇后問題 遞迴 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。8 8的棋盤方格 每一行的某一列上要有乙個皇后 public class eightqueen 左上方 for int i 1 r...

八皇后問題 遞迴

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例.在8x8格的西洋棋上擺放8個皇后,使其不能互相攻擊,即 任意兩個皇后都不能處於同一行,同一列或同一斜線上,問有多少中擺法 92 第乙個皇后先放第一行第一列 第二個皇后放在第二行第一列,然後判斷是否ok,如果不ok,繼續放在第二列,第三列,依...