題目描述:八皇后問題
n個皇后兩兩不在一行,不在一列,不在同一對角線上
1.方法1 ——暴力法
/*
* n皇后問題 —— n個皇后兩兩不在一行,不在一列,不在同一對角線上
* 兩種方法: 1、暴力法 2、回溯法
*/#include #include #include #include #define n 8
bool hash[n+1];
int p[n+1];
int count =0;
//暴力法 無優化
void generate(int index)}}
if(flag)
return;
}//生成1~n的排列
for(int x =1; x <=n; x++)
}}
2.方法2——回溯法實現
**實現:
/*回朔法
在到達遞迴邊界前的某層,由於一些事實導致已經不再
需要往任何乙個子問題遞迴,就可以直接返回上一層。
*/void generatep(int index)
printf("\n");
return ;
}//第x行
for(int x =1; x <=n; x++)
}//如果可以把皇后放在第x行
if(flag)}}
}int main()
generatep(1);
printf("%d\n",count);
return 0;
}
n皇后問題c語言 九章演算法 N皇后問題
n皇后問題是將n個皇后放置在n n的棋盤上,皇后彼此之間不能相互攻擊 任意兩個皇后不能位於同一行,同一列,同一斜線 給定乙個整數n,返回所有不同的n皇后問題的解決方案。每個解決方案包含乙個明確的n皇后放置布局,其中 q 和 分別表示乙個女王和乙個空位置。樣例1 輸入 1 輸出 q 樣例2 輸入 4 ...
N皇后 C語言
文章目錄 簡單的搜尋 n皇后問題 題目輸入 輸出樣例輸入 樣例輸出 做題思路 簡單的搜尋 n皇后問題 題目在一張n n的西洋棋棋盤上,放置n個皇后,使得所有皇后都無法互相直接攻擊得到,皇后可以直接攻擊到她所在的橫行,豎列,斜方向上的棋子 現在輸入乙個整數n,表示在n n的棋盤上放n個皇后,請輸出共有...
N皇后問題(c )
在n n格的西洋棋上擺放n個皇后 0 n 10 使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。每行只能放置乙個皇后 每列也只能放置乙個皇后,那麼如果把n列皇后所在的行號依次寫出,那麼就會是1 n 的乙個排列。於是需要列舉1 n 的所有排列,然後檢視每個排列對應...