hdu n皇后問題 (dfs)

2021-06-20 21:06:20 字數 824 閱讀 7413

小記:c語言經典問題,細細想來還是 蠻耐人尋味的。

思路:對列深搜,就可以看每一列到底在哪一行 放皇后, 然後斜列上的點的座標滿足 乙個等式, 用三個陣列即可標記。

詳情可看**的陣列解釋。

**;#include #include #include #include using namespace std;

const int max_ = 11;

const int inf = 100000000;

int dir[8][2] = ,,,,,,,};

int da[2] = ;

int a=;

int vis[max_][max_][max_];

int n,m,cnt, ans;

int col[max_];//以列為基礎,看在某一列的第幾行放乙個皇后

int rup[2*max_];//從右上到左下,左上角為原點,那麼從右上到左下的這一斜線上的點的座標 x+y值相等

int lup[2*max_];//同理反向的斜線的座標點 滿足 n-y + x的值相等

struct point s,e,t;

void dfs(int i)

else }}

}int main() {

int t;

char c;

while(cin>>n,n) {

ans = 0;

memset(col,0,sizeof(col));

memset(rup,0,sizeof(rup));

memset(lup,0,sizeof(lup));

dfs(1);

cout<

八皇后問題 DFS

古老而且典型的回溯問題 八皇后問題 找了採用深度優先 進行實現 思路 一 首先 需要 乙個判斷該位置能不能放的問題 1 乙個同一行 肯定不能放 並且 mat i col 問題了 2 左斜向上的部分肯定不能放 因為這裡是從0 行開始的 先卡第一行 在看第二行 要是左斜向上 有皇后 那麼這個位置不能放 ...

dfs 解決皇后問題

八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n1 n1,而皇后個數也變成n2。而且僅當 n2...

N皇后問題 DFS

在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共有若...