題意:有乙個大火蔓延的迷宮,迷宮中有障礙格,而所有著火的格仔都會往四周蔓延。求出到達邊界格仔時的最短時間。
思路:複雜了一點的迷宮。
在bfs之前,我們首先需要計算出火勢蔓延的情況,火勢每次向四周蔓延乙個格仔,所以這也是乙個最短路問題,也用一次bfs,計算出每個空白格仔著火時的時間。這樣,當我們第二次bfs去計算走出迷宮的時間時,對於每乙個可走的格仔,我們只需要判斷在此時該格仔是否著火,如果還未著火,則該格仔是可以走的。
1 #include2 #include3 #include4 #include5using
namespace
std;67
const
int maxn = 1000 + 5;8
9int
map[maxn][maxn];
10int
fire[maxn][maxn];
11int
vis[maxn][maxn];
1213
intdx, dy;
14int
n, m;
1516
int sx = ;
17int sy = ;
1819
20struct
node21;
2526
void
bfs1()
2742}43
while (!q.empty())
4461}62
}636465
intbfs2()
6695}96
return -1;97
}9899100
intmain()
101122
else map[i][j] = 1
;123
}124
125bfs1();
126int ans=bfs2();
127if (ans == -1) cout << "
impossible
"<128else cout << ans <129}
130 }
bfs 大火蔓延的迷宮,UVA 11624
一開始wa了,因為以為只有乙個火源,其實有多個 portions 真的需要加強英語閱讀能力了。解法 這就是乙個加了一些限制條件的迷宮問題,限制條件是迷宮會著火,隨著時間的推移火會蔓延,仔細思考就會發現每個格仔著火的時間是固定而且有跡可循的,如果能預處理出每個格仔著火的時間,那麼問題就已經解決了 只需...
UVA 11624(簡單bfs 初始化)
uva題目鏈結 vj題目銜接 題目大意 火每次四個方向延伸,問人能否跑出這個迷宮,也就是人能走的格仔必須在火延伸到那裡之前。注意 fire火堆並不是只有乙個,可以有多個fire。但j只有乙個。思路 廣搜每個f,初始化time陣列,也就是為後面j是否可以走到這個格仔上做準備 也就是stemp x y ...
5 14每日鮮例題(一)UVA 11624 BFS
乙個稍微複雜一點的搜尋 首先預處理每個格仔 的時間,j進行轉移的時候加上下乙個格仔在下一時刻是否會著火或是否已經著火的判斷即可 includeusing namespace std const int maxn 1005 char e maxn maxn int t maxn maxn bool b...