題目鏈結
bfs廣搜,從s到p+從t到p的所有求最小值輸出就好,需要注意的地方
採用了stl的map,map預設按key值排序,故當使用自定義結構體時,應當在結構體內重構比較運算子,一開始只是簡單比較了point的x值,後來插入有誤,檢查後發現當x值相等時便覆蓋了相同x值的對映
採用的point結構體的cnt值變化後,作為對映的key值也會變化
ac**如下:
#include
using namespace std;
const
int maxn =
2005
;int to[4]
[2]=
,,,}
;int n, m;
char amap[maxn]
[maxn]
;bool vis[maxn]
[maxn]
, flag;
struct point
bool operator <
(point const
&a)const};
struct spoint
bool operator <
(spoint const
&a)const};
point st =
point(0
,0,0
);point en =
point(0
,0,0
);mapint>fir;
map<
int, spoint>sec;
void
bfs(point s)}}
}}intmain()
else
if(c ==
't')}}
memset
(vis, false,
sizeof
(vis));
flag = true;
bfs(st)
;memset
(vis, false,
sizeof
(vis));
flag = false;
bfs(en)
;for
(mapint>
::iterator it = fir.
begin()
; it != fir.
end();
++it)
sec.
insert
(pair<
int, spoint>
(it->second, it->first));
map<
int, spoint>
::iterator it = sec.
begin()
; cout
}
計蒜客 蒜頭君回家(bfs)
蒜頭君要回家,但是他家的鑰匙在他的朋友花椰妹手裡,他要先從花椰妹手裡取得鑰匙才能回到家。花椰妹告訴他 你家的鑰匙被我複製了很多個,分別放在不同的地方。蒜頭君希望能盡快回到家中,他需要首先取得任意一把鑰匙,請你幫他計算出回家所需要的最短路程。蒜頭君生活的城市可以看做是乙個 n m 的網格,其中有道路有...
計蒜客 蒜頭君回家
樣例輸入 8 10 p.p t s 樣例輸出 思路用兩次bfs,第一次計算出起點到p的距離,第二次計算出t到p的距離,然後迴圈取最小值。但是wa了很多次,找了很久,發現是vis判斷的問題,導致乙個資料更新多次。ac include include include include using name...
蒜頭君回家(bfs)
蒜頭君要回家,但是他家的鑰匙在他的朋友花椰妹手裡,他要先從花椰妹手裡取得鑰匙才能回到家。花椰妹告訴他 你家的鑰匙被我複製了很多個,分別放在不同的地方。蒜頭君希望能盡快回到家中,他首先需要取得任意一把鑰匙,請你幫他計算出回家所需要的最短路程。蒜頭君生活的城市可以看做是乙個 n m 的網格,其中有道路有...