藍橋杯試題 演算法訓練 王、後傳說
題目描述:
資源限制
時間限制:1.0s 記憶體限制:256.0mb
問題描述
地球人都知道,在西洋棋中,後如同太陽,光芒四射,威風八面,它能控制橫、堅、斜線位置。
看過清宮戲的中國人都知道,後宮乃步步驚心的險惡之地。各皇后都有自己的勢力範圍,但也總能找到相安無事的辦法。
所有中國人都知道,皇權神聖,伴君如伴虎,觸龍顏者死…
現在有乙個n*n的皇宮,國王佔據他所在位置及周圍的共9個格仔,這些格仔皇后不能使用(如果國王在王宮的邊上,占用的格仔可能不到9個)。當然,皇后也不會攻擊國王。
現在知道了國王的位置(x,y)(國王位於第x行第y列,x,y的起始行和列為1),請問,有多少種方案放置n個皇后,使她們不能互相攻擊。
輸入格式
一行,三個整數,皇宮的規模及表示國王的位置
輸出格式
乙個整數,表示放置n個皇后的方案數
樣例輸入
8 2 2
樣例輸出
10資料規模和約定
n<=12
注意n個皇后擺放需要滿足的條件:
(1)每2個皇后不能放在同一行,同一列,同乙個斜線(兩個點組成的線的斜率的絕對值為1)。
(2)皇帝的位置以及周圍的位置(一共9個位置)不能擺放皇后。
解題思路:
由上面的擺放條件可以知道,每2個皇后不能在同一行,和同一列,那麼我們可以把問題轉化為這樣:找出1~n的全排列作為皇后擺放的列數的序列(行數是固定從1—>n的,方便計算和遞迴),當然這些全排列序列需要滿足每兩個位置的(第幾行,第幾列)的斜率絕對值不能是1,且不能在皇帝所在的位置。
#include
#include
#include
#include
#include
#include
using
namespace std;
int n;
//皇宮的規模
int ans=0;
//最後的答案,即放置n個皇后的方案數
int a[15]
;//a[i]的值表示,在第step行的第 a[i]列擺放皇后
int vis[15]
;//標記該位置是否訪問過,0表示為沒有被訪問
voidf(
int step,
int x,
int y)
//step表示給第step行擺放皇后
else}if
(!flag)}}
}}intmain()
藍橋杯 演算法訓練 王 後傳說
問題描述 地球人都知道,在西洋棋中,後如同太陽,光芒四射,威風八面,它能控制橫 堅 斜線位置。看過清宮戲的中國人都知道,後宮乃步步驚心的險惡之地。各皇后都有自己的勢力範圍,但也總能找到相安無事的辦法。所有中國人都知道,皇權神聖,伴君如伴虎,觸龍顏者死.現在有乙個n n的皇宮,國王佔據他所在位置及周圍...
演算法訓練 王 後傳說 藍橋杯
問題描述 地球人都知道,在西洋棋中,後如同太陽,光芒四射,威風八面,它能控制橫 堅 斜線位置。看過清宮戲的中國人都知道,後宮乃步步驚心的險惡之地。各皇后都有自己的勢力範圍,但也總能找到相安無事的辦法。所有中國人都知道,皇權神聖,伴君如伴虎,觸龍顏者死.現在有乙個n n的皇宮,國王佔據他所在位置及周圍...
藍橋杯 演算法訓練 王,後傳說
題目 演算法訓練 王 後傳說 時間限制 1.0s 記憶體限制 256.0mb 問題描述 地球人都知道,在西洋棋中,後如同太陽,光芒四射,威風八面,它能控制橫 堅 斜線位置。看過清宮戲的中國人都知道,後宮乃步步驚心的險惡之地。各皇后都有自己的勢力範圍,但也總能找到相安無事的辦法。所有中國人都知道,皇權...