遞迴問題之八皇后問題

2021-08-21 20:14:44 字數 1076 閱讀 1531

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

解決思路:仔細分析這個問題,發現為了滿足要求每一次放置棋子的時候肯定要放置在不同行,那麼可以將問題簡化為:從第一行開始,第一次將棋子放在第一行的某個位置,第二次放在第二行的某個位置...以此類推,那麼第八次將棋子放在第八行的某個位置(如果存在這個位置的話)。因此可以利用類似遞迴的方法解決這個問題,我們定義乙個eightqueen函式,引數為當前放置棋子的行數,通過遞迴呼叫便可以輕鬆求出所有的解。

判斷能否放置在某一位置:在判斷的時候需要對某乙個點position(x, y)進行列和對角線的判斷,因此需要5個判斷。(這裡不需要判斷行是因為每一次放置都是在新的一行放置,不存在重複的問題!)。

最終的完整程式為:

#include using namespace std;

int eqmap[8][8] = ;

int counter = 1;

bool isthisplaceok(int x, int y)

} // west-north

for(int i = x, j = y; i >= 0 && j >= 0; i--, j--) }

// west-south

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

// east-south

for(int i = x, j = y; i < 8 && j < 8; i++, j++) }

// east-north

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

return true;

}void printmap()

cout << endl;

} cout << endl;

}void eightqueen(int currow)

{ if(currow == 8)

{ cout << "map " << counter++ <

八皇后問題 遞迴

問題描述 在乙個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,繼續放在第二列,第三列,依...