FZU 2028 時空門問題 (BFS)

2021-08-11 11:03:16 字數 1295 閱讀 5630

problem 2028 時空門問題

在乙個n*m的地圖上旅行。地圖上有些地方可以走用. 表示,不能走用 # 表示。在可以走的地方上下左右移動一格需要乙個單位時間。可以走的地方還有一些時空之門。時空之門可以減少旅行的時間。如果 a 到 b 有一道時空之門,那麼從 a 到 b 經過時空之門只要 1 個單位時間。在乙個點可以有很多門通向其他的不同點。現在 john 在 s 點,他想以最快的時間到 t 點。求出最短時間。

輸入包含多組資料 輸入資料第一行兩個正整數 n m (1< n,m <= 500) 接著 n 行,每行 m 個字元 表示地圖。#表示不可走,.表示可以走,s表示開始位置,t表示終止位置。乙個地圖中只有乙個s與1個t. 接著 n*m 行,給出每個點的時空之門。按行優先給出,即給出的順序為(1,1),(1,2) ….. (1,m) ,(2,1)....(2,m)....。 每行第乙個數 k 表示該點的時空之門數,接著給出 k 個點,表示該點通向這k個點的時間為1。其中時空之門的個數不超過100000。對於50%的資料,時空之門的個數為0 在給出的資料中,不能走的點#的時空之門數一定為0,且沒有通向不能走的點的時空之門。 

s 到 t 的最短時間。資料保證s可以走到t。 

2 2s#t.0000 1

福州大學第八屆程式設計競賽

就多了幾個傳送門,vector來存

#include #include #include #include #include #include #include #include using namespace std;

const int maxn =555;

const int inf = 0x3f3f3f3f;

struct node

};int dir[4][2]=;

vectormen[maxn][maxn];

char mp[maxn][maxn];

int flag[maxn][maxn];

int sx,sy;

int n,m;

int check(int x,int y)

int bfs(int x,int y)

int step=s+1;

for(int i=0;i=flag[xx][yy]) continue;

else

} for(int i=0;i<4;i++)

} }return -1;

}int main()

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

}} printf("%d\n",bfs(sx,sy));

}}

2 02 理解查詢模型

示例 select name from users where age 10 可以形象的看作是下面這樣 let arr let users users.foreach item 是指列與列之間進行運算得出的結果,叫做廣義投影 因為null 表達的意思是 空 null null false null ...

FZU 單詞問題

給出乙個完整的句子,這個句子中不包含不可見字元或者空格,於是在這個句子中有許多不同的單詞。乙個單詞是指一串連續的最長的英文本母 大寫或小寫 例如 abc 中,abc 就是乙個單詞,而 ab bc 都不算單詞。輸入包含多組資料 輸入資料第一行是乙個句子,只包含可見字元 不包含空格 句子長度不超過 10...

fzu 單詞問題

description 給出乙個完整的句子,這個句子中不包含不可見字元或者空格,於是在這個句子中有許多不同的單詞。乙個單詞是指一串連續的最長的英文本母 大寫或小寫 例如 abc 中,abc 就是乙個單詞,而 ab bc 都不算單詞。input 輸入包含多組資料 輸入資料第一行是乙個句子,只包含可見字...