ACM N皇后問題

2021-07-27 11:01:28 字數 1104 閱讀 4501

問題描述:

給定乙個n*n的棋盤,放置n個彼此無法攻擊的皇后,在西洋棋中,皇后可以攻擊與其在同一列或者同一行或者同一斜線上的旗子。也就是說,在n個皇后中,任意兩個都不能放在同一列或者同一行或者同一斜線上。

解題思路:

x[t]表示第t行中皇后所在列,因此x陣列[t1,t2…tn]是乙個1-n的全排列。所以從第一行開始,一行一行的向下進行,在每一行中遍歷每一列,然後監測是否滿足,如果滿足,則進入下一行,如果不滿足,回溯到上一行。

在進行演算法實現的時候,盡量使用迭代而不是遞迴。

遞迴思路:

#include 

#include

#include

#define n 100

using

namespace

std;

//遞迴**

int x[n];

int sum;

int n;

int valid(int k) //監測k是否可以在該行中滿足皇后條件

return1;}

int queen(int t) //t對層數進行遍歷

}return sum;

}int main()

迭代思路:

#include 

#include

#include

#define n 100

using

namespace

std;

//遞迴**

int x[n];

int sum;

int n;

int valid(int k) //監測k是否可以在該行中滿足皇后條件

return1;}

int queen(int t) //t對層數進行遍歷

else

t--; //回溯到上一層,再次進入while迴圈,x[t]+=1

}return sum;

}int main()

問題 I n皇后問題

在n n 格的棋盤上放置彼此不受攻擊的n 個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於在n n格的棋盤上放置n個皇后,任何2 個皇后不放在同一行或同一列或同一斜線上。設計乙個解n 後問題的佇列式分支限界法,計算在n n個方格上放置彼此不受攻擊的n個皇...

八皇后問題 2n皇后問題

問題描述 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處在同一行 同一列或同一斜線上。解決思路 解決八皇后問題不難,主要是應用到了遞迴回溯的方法,本質上也是一種列舉法。從棋盤的第一行開始嘗試擺放第乙個皇后,擺放成功之後,遞迴一層,再遵循規則在棋盤第二行來擺放第二個皇后。如...

n皇后問題與八皇后

這裡的n皇后問題指在乙個nxn的棋盤上放置n個棋子,使得每行每列和每條對角線上都只有乙個棋子,求其擺放的方法數。當且僅當n 1 或 n 4 時問題有解。class queens vector vector res int result 0 bool test int cur for int i 0 ...