小記: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 共有若...