題目描述
在n×n格的棋盤上放置n個皇后,任何2個皇后不放在同一行或同一列或同一斜線上
解題思路
由於n個皇后的任意兩個不能處在同一行,那麼肯定是每個皇后佔據一行,於是我們定義乙個陣列,長度為n。
陣列的第i個數字代表位於第i行的皇后的列號。先把陣列中的n個數字用(1–>n)初始化,然後對該陣列中的數字作全排列。
因為我們是用不同的數字初始化陣列,故而所有皇后肯定不同列。
因此我們只需要判斷每乙個排列對應的n個皇后是否在同一條對角線上,
也就是對於陣列的兩個下標i和j,是不是有 abs(a[i]-a[j]) = abs(i - j)。
如果成立,則該解法不滿足條件。篩選過後可以得到所有滿足條件的解法。
具體**實現
#include #include #include int n; //皇后個數
int count; //排序結果的數量
//列印n後排序後的狀態
void printf(int data);
for(int i = 1; i<=n;i++)
printf("\n第%d種排列方式: \n",count+1);
for(int i = 1;i<=n;i++)
printf("\n");
} count++;
}void swap(int &x, int &y)
//判斷此位置是否能夠插入
int judge(int data, int k)
for(int j=1;jn)
else }
}int main()
n皇后,排列樹
package com.alo.offer public class wolfqueen n代表當前是第幾個皇后 param n 皇后n在array n 列 int a private void check int n 從第一列開始放值,然後判斷是否和本行本列本斜線有衝突,如果ok,就進入下一行的邏...
回溯法解決N皇后問題 C語言
問題描述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。回溯法 回溯法又稱試探法。回溯法的基本做法是深度優先搜尋。即從一條路往前走,能進則進,不能進則退回來...
N 皇后問題 回溯法
n 皇后問題 在 n n 的棋盤上放置彼此不受攻擊的 n 個皇后,任意兩個皇后不同行 不同列 不同斜線。思路 1.因為皇后不能同行,所以,在每一行放置乙個皇后就行 2.當在一行放置皇后的時候 1 順序檢查這一行每乙個位置是否和上面所有的皇后,只要有乙個同列或者在斜線上就不能放置 若找到乙個滿足的,放...