回溯篇 8皇后NOJ10078

2021-10-10 05:42:36 字數 1204 閱讀 5027

時限:1000ms 記憶體限制:10000k 總時限:3000ms

在8×8( n×n )格的西洋棋上擺放n個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。

沒有輸入

每個結果第一行是no n:的形式,n表示輸出的是第幾個結果;

下面8行,每行8個字元,『a』表示皇后,『.』表示空格。

不同的結果中,先輸出第乙個皇后位置靠前的結果;第乙個皇后位置相同,先輸出第二個皇后位置靠前的結果;依次類推。

提示輸出樣例是正確輸出結果的前幾行。

①用陣列q存放皇后的位置,q[k]表示第k個皇后放置的位置,n皇后問題的乙個解是: q[1],q[2],…,q[n],數 組q的下標0元素不用。

②先放置第1個皇后,然後依2、3、…、n的次序放置其他皇后,當第n個皇后放置好後產生乙個解。為了找所有解,此時演算法還不能結束,繼續試探第n個皇后的下乙個位置。

③第k(k#include

#include

using namespace std;

int num=0;

int chessboard[8]

;void

dfs(

int k)

;void

print_chessboard

(int m)

;bool check_place

(int x,

int y)

;int

main()

void

dfs(

int k)

else}}

}bool check_place

(int x,

int y)if(

fabs

(x-i)

==fabs

(y-chessboard[i]))

//判斷是否和之前放的皇后在同一斜行

}return true;

}void

print_chessboard

(int m)

else

}printf

("\n");

}}

NOJ 1007 8皇后問題

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述輸出8皇后問題所有結果。輸入沒有輸入。輸出每個結果第一行是no n 的形式,n表示輸出的是第幾個結果 下面8行,每行8個字元,a 表示皇后,表示空格。不同的結果中,先輸出第乙個皇后位置靠前的結果 第乙個皇后位置相同,先輸出第二個...

回溯演算法 8皇后

回溯演算法的本質是深度優先搜尋,回溯又叫試探法 backtracking 深度優先遇到障礙再返回來。回溯法要先定義乙個解空間,用便於搜尋的方式整理解空間,然後深度優先搜尋。八皇后問題 解空間?八個皇后在棋盤上面的排列位置可以用乙個8元陣列表示,x1,x2,x3,x4,x5,x6,x7,x8代表第i行...

迭代回溯 8皇后

八皇后問題 就是在8 8格仔上放8個皇后 皇后是可以橫行豎行斜行行走 他們之間不能存在可以被吃的關係 演算法 迭代回溯法 思路是這樣 紅色框代表put 函式裡的if沒有通過 就不再有進一步迭代 子樹 進行下乙個1皇后2列的進一步匹配 陣列q key是行數 value是列數 max1 n皇后 圖 de...