求助,怎麼用dfs完成poj 4116 拯救行動?

2021-10-03 21:41:43 字數 1636 閱讀 4458

總時間限制: 1000ms 記憶體限制: 65536kb

描述

公主被惡人抓走,被關押在牢房的某個地方。牢房用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」

樣例輸入

樣例輸出137

我用了記憶化搜尋,能求出第乙個例子,但沒法ac,求大佬看看哪的問題

#include

#include

#include

using

namespace std;

int s;

int n, m;

char mg[

210]

[210];

//迷宮

int v[

210]

[210];

//判斷陣列

int rx, ry;

//起點

int dx[4]

=;int dy[4]

=;int ds[

210]

[210];

// 某點到終點最小距離

intdfs

(int x,

int y)}}

if(mg[x]

[y]==

'x') ds[x]

[y]= temp +2;

else ds[x]

[y]= temp +1;

return ds[x]

[y];

}int

main()

}}v[rx]

[ry]=1

;int ans =

dfs(rx, ry);if

(ans >=

1<<

30) cout <<

"impossible"

<< endl;

else cout << ans << endl;

}return0;

}

求助臨時表怎麼鏈結查詢呀

常規的多條件查詢可以寫成這樣 set rs server.createobject adodb.recordset if fl1 0 then sql select from tuku where img if fl2 0 and fl2 then sql sql and kj fl2 if fl3...

arcgis自動完成面怎麼用 農業自動氣象站怎麼用

農業氣象站 agricultural meteorological station 是一種能自動地觀測與儲存氣象觀測資料的裝置,其主要功能是實時監測風 溫度 濕度 氣壓 草溫等氣象要素以及土壤含水量的資料變化。當今,自動農業氣象站有多種型別,但結構基本相同,主要由感測器 採集器 系統電源 通訊介面及...

arcgis自動完成面怎麼用 半自動咖啡機怎麼用?

半自動咖啡機怎麼用?半自動咖啡機 需要另外用專門的磨豆機將咖啡豆研磨成粉,人工調整粉粒的粗細 份量和咖啡機的水溫等 還需要人工將適量的咖啡粉填充進手柄中的粉碗裡,然後手工壓實,裝上咖啡機進行萃取,得到一杯espresso。在此過程中,任何一點變化都可以讓每次做出來的咖啡的風味都不一樣,所以比較考驗操...