BFS 逃離迷宮 長沙理工大學校賽G

2021-08-18 20:23:14 字數 1684 閱讀 6742

題目描述

給你乙個n*m的圖,地圖上'.'代表可以走的地方,而'#'代表陷阱不能走,

'p'代表人物位置,'k'代表鑰匙,'e'代表出口。

人物乙個,鑰匙有多個,('k'的數量<=50)),出口乙個,

每個位置可以向(上,下,左,右)四個方向走一格,花費乙個單位時間,

現在你需要花費最少的時間拿到鑰匙 然後從迷宮的出口出去

(若沒有鑰匙,則不能進入迷宮出口所在的格仔)。

輸入描述:

第一行乙個整數t(t <= 50),代表資料的組數

接下來一行n,m(n<=500,m<=500),代表地圖的行和列

接下來n行,每行乙個長度為m的字串,組成乙個圖。

輸出描述:

如果可以出去,輸出所花費的最少時間。

如果不能出去,輸出一行"no solution"。

輸入

3

5 5

....p

##..e

k#...

##...

.....

5 5p....

.....

..e..

.....

....k

5 5p#..e

.#.#.

.#.#.

.#.#.

...#k

輸出

no solution

12no solution

//多個k:經過k的最短路 = 起點開始到k + 終點開始到k 的最短路之和最小

#include using namespace std;

int n, m;

char m[500][500], m1[500][500], m2[500][500];

int d[500][500], d1[500][500], d2[500][500];

int dirx[4] = ;

int diry[4] = ;

struct weizhi

s, e;

queuesq, eq;

int main()

//複製兩張相同的地圖

void sbfs ( weizhi );

sbfs ( s ); //從起點開始廣搜

void ebfs ( weizhi );

ebfs ( e ); //從終點開始

int ans = 1e9;

for ( int i = 0; i < n; i++ )

for ( int j = 0; j < m; j++ )

if ( ans == 1e9 ) cout << "no solution" << endl;

else cout << ans << endl;

} return 0;

}void sbfs ( weizhi s )

} }}void ebfs ( weizhi e )

} }}

2016 4 17 南京理工大學校賽

題目傳送門 a偷吃糖果 題意 給你兩個字串,將其中的連續的相同的字串都縮成乙個,問操作完畢後這兩個字串是否相等。分析 簡單題,暴力上吧。include using namespace std const int n 1005 char s1 n s2 n char ans1 n ans2 n int...

CSDN技術訓練營 長沙理工大學

歷時兩周 2500 學員聽講座 申 入訓練營150 線上篩選60人 最終40名學員通過嚴格的筆試 面試,順利進入csdn訓練營學習。座無虛席 csdn董事長的講座 2020年11月5日,csdn董事長蔣濤在長沙理工大學雲塘校區與長理學子進行了一次精彩的創業經驗分享講座 中國開發者的 十年及蔣濤先生的...

2023年浙江理工大學新生賽

沒有優化,寫的還醜,可以說是因為原汁原味嗎 time limit 1 sec memory limit 128 mb submit 980 solved 42 給出乙個 c,問是否存在正整數解 a,b,使得b 3 a 3 c 成立。有多組測試 組數 1000 每組給出 c 1 c 1e9 輸出一對解...