NOI2 5 4980 拯救行動

2022-09-19 07:09:08 字數 2085 閱讀 1528

描述公主被惡人抓走,被關押在牢房的某個地方。牢房用n*m (n, m <= 200)的矩陣來表示。矩陣中的每項可以代表道路(@)、牆壁(#)、和守衛(x)。 

英勇的騎士(r)決定孤身一人去拯救公主(a)。我們假設拯救成功的表示是「騎士到達了公主所在的位置」。由於在通往公主所在位置的道路中可能遇到守衛,騎士一旦遇到守衛,必須殺死守衛才能繼續前進。 

現假設騎士可以向上、下、左、右四個方向移動,每移動乙個位置需要1個單位時間,殺死乙個守衛需要花費額外的1個單位時間。同時假設騎士足夠強壯,有能力殺死所有的守衛。

給定牢房矩陣,公主、騎士和守衛在矩陣中的位置,請你計算拯救行動成功需要花費最短時間。

輸入第一行為乙個整數s,表示輸入的資料的組數(多組輸入)

隨後有s組資料,每組資料按如下格式輸入 

1、兩個整數代表n和m, (n, m <= 200). 

2、隨後n行,每行有m個字元。"@"代表道路,"a"代表公主,"r"代表騎士,"x"代表守衛, "#"代表牆壁。

輸出如果拯救行動成功,輸出乙個整數,表示行動的最短時間。

如果不可能成功,輸出"impossible"

樣例輸入

2

7 8#@#####@

#@a#@@r@

#@@#x@@@

@@#@@#@#

#@@@##@@

@#@@@@@@

@@@@@@@@

13 40

@x@@##x@#x@x#***x##@#x@x@@#x#@#x#@@x@#@x

xx###x@x#@@##xx@@@#@x@@#x@***@@#x@#x@@x@

#@x#@x#x#@@##@@x#@xx#***@@x##@@@#@x@@x@x

@##x@@@x#xx#@@#***x#@@x@x@#@x@@@x@#@#x@#

@#***xx##@@x##x@***@@#x@x####@@@x#x##@#@

#***#@#x##***x@@#xx@@@x@***#@#***@x#####

#x@***x#@x@@@@##@x#xx#***@#xx#@#####x#@x

xx##@#@x##x##x#@x#@a#xx@##@#@##xx@#@@x@x

x#x#@x@#x#@##@xrx@x#***x@##x##xx#@#x@xx@

#x@@#@###x##x@x#@@#@@x@x@@xx@@@@##@@x@@x

x#xx@x###@***#@#x#@@###@#@##@x#@x@#@@#@@

#@#x@x#x#x###@x@@***####x@x##@x####xx#@x

#x#@x#x######@@#x@#***x#xx@@@#xx#x#####@

樣例輸出
13

7

這道題剛開始純潔地想:廣搜,遇小兵加2,遇地板加1,結果沒錯,0分…………(t—t)

錯誤**:

#include#include#include#include#include#includeusing namespace std;

char c[201];

int z[4]=,u[4]=,m,n,xz,yz,num,nn,v[201][201];

void find(int p,int q)

,u[4]=,m,n,xz,yz,num,nn,v[201][201];

void find(int p,int q)

,u[4]=,m,n,xz,yz,num,nn,v[201][201][2];

void find(int p,int q)

{ int x=0,y=0,t=0,w=1,i;

int h[100001][4];

h[1][0]=p;

h[1][1]=q;

h[1][2]=0;

h[1][3]=1;

do {

t++;

if(!v[h[t][0]][h[t][1]][0])

{ for(i=0;i<4;i++)

{x=h[t][0]+z[i];

y=h[t][1]+u[i];

if(x>=0&&x=0&&y

功夫不負有心人啊!!!!!!

openjudge 拯救行動

描述 公主被惡人抓走,被關押在牢房的某個地方。牢房用n m n,m 200 的矩陣來表示。矩陣中的每項可以代表道路 牆壁 和守衛 x 英勇的騎士 r 決定孤身一人去拯救公主 a 我們假設拯救成功的表示是 騎士到達了公主所在的位置 由於在通往公主所在位置的道路中可能遇到守衛,騎士一旦遇到守衛,必須殺死...

openjudge 拯救行動

總時間限制 10000ms 記憶體限制 65536kb 描述 公主被惡人抓走,被關押在牢房的某個地方。牢房用n m n,m 200 的矩陣來表示。矩陣中的每項可以代表道路 牆壁 和守衛 x 英勇的騎士 r 決定孤身一人去拯救公主 a 我們假設拯救成功的表示是 騎士到達了公主所在的位置 由於在通往公主...

POJ拯救行動

當各個節點的權重一樣的時候,最小代價的路徑 最短距離路徑。可以把bfs理解為每次擴張一圈,只要記錄每個節點在第幾圈即可,與具體怎麼從乙個圈到達另乙個圈的路徑無關。解法一 bfs 優先佇列 當每個節點權重不一樣時,要想使每個節點的代價最小,只要保證所有能到達它的節點的代價都是最小的,並從中選擇最小的那...