回溯法之經典問題 皇后問題

2021-07-24 22:50:14 字數 1012 閱讀 1457

給出n*n的棋盤,能夠多少種不同的放置「皇后」的方法。

//遞迴實現 hdu 2553 

//dfs、

#include

using

namespace

std;

int n, total;

int pos[10];//存的是row的編號,通過row自己的下標row可以找到對應的pos[row],因為dfs存的時候是pos[row] = row;

從而在下面check()中判斷是否是同一列的時候判斷pos[j] == col?

//因為從第一行開始的dfs不存在處於同一行的情況

int check(int row,int col)

return1;}

void dfs(int row)

}

}}int main()

while(scanf("%d",&n) && n)

return

0;}

//非遞迴實現

#include

#define inf -10000

#define max 11

using

namespace

std;

int pos[max];

int a[max];

void init(int n) }

int check(int row,int col,int n)

return1;}

int queen(int n)

else

}if( pos[i] == inf )//第i行沒有找到

}if( i == n - 1 )//最後一行找到乙個皇后位置,說明有乙個結果 ,列印

++i;//繼續探測下一行

}return m;

}int main()

int n;

while(scanf("%d",&n) && n)

八皇后問題(經典演算法 回溯法)

問題描述 八皇后問題 eight queens problem 是十九世紀著名的數學家高斯於1850年提出的。問題是 在8 8的棋盤上擺放八個皇后,使其不能互相攻擊。即任意兩個皇后都不能處於同一行 同一列或同一斜線上。可以把八皇后問題擴充套件到n皇后問題,即在n n的棋盤上擺放n個皇后,使任意兩個皇...

八皇后問題(經典演算法 回溯法)

問題描述 八皇后問題 eight queens problem 是十九世紀著名的數學家高斯於1850年提出的。問題是 在8 8的棋盤上擺放八個皇后,使其不能互相攻擊。即任意兩個皇后都不能處於同一行 同一列或同一斜線上。可以把八皇后問題擴充套件到n皇后問題,即在n n的棋盤上擺放n個皇后,使任意兩個皇...

N皇后問題之回溯法

time limit 1000msmemory limit 32768kb64bit io format i64d i64u description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於...