Poj 2312 ,坦克大戰,BFS的變形

2022-04-01 08:18:38 字數 922 閱讀 9988

挺有趣的一道題目,然而很容易wa,我就wa了一次,雖然我debug的時候已經知道**出問題了,就是比如說我搜到b和e時,從b搜第三個點,b左邊的e就被搜了,step為3,然而其實他是step為2,

這裡的處理方法很是巧妙,可以從b出發時,把b換成e,step+1,形成乙個新的結點加入到佇列中去.

之後,和杰哥交流了這下題,我對這個bfs又有了新的一點認識,bfs時,每次搜尋的點,都要是同一級別的點,想這裡b,和e就不是同一級別的點,所以將這個b,分成兩部,注意b搜完後不要標記,b還沒有訪問完。

#include #include 

#include

using

namespace

std;

int to[4][2]= ,,,};

struct

point

;int

r,c;

char maps[305][305

];bool vis[305][305

];bool judge (int rx,int

cx)int

main()}}

int ans = -1

; queue

q; point a,next;

a.r =sr;

a.c =sc;

a.step = 0

; vis[a.r][a.c] = true

; q.push(a);

while(!q.empty())

if(maps[a.r][a.c]=='b'

)

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

}printf(

"%d\n

",ans);

}return0;

}

poj2312優先佇列BFS

題意 給你乙個m行n列的矩陣。y代表起點,t代表終點。b e可以走,s r不可以走,b的時間花費為2,e為1.求y到t的最短時間。思路 用優先佇列bfs一遍就可以了 include include include include include include includeusing namesp...

NYOJ 284 坦克大戰(BFS)

好累啊,寫篇部落格歇歇。題目背景很有趣,是大家小時候經常玩的坦克大戰,哈哈。弱弱地表示本人小時候經常玩遊戲機。此題是在迷宮問題的基礎上做了些改動,就是地圖上能走的點可能耗費時間1,也可能耗費時間2。那麼,元素在出佇列時,不能簡單的按照以前的入隊順序出隊了,而應該讓時間最短的先出隊,這樣就能夠保證先入...

nyoj284 坦克大戰 搜尋 bfs

樣例輸入 3 4ybeb eere sste 0 0樣例輸出 8 題意 從y字母的位置到t字母的位置最少trun了幾次 遇到r,s不能走,遇到b的話要turn 2次。坑點在必須用優先佇列,hiphop man 為什麼?真的不知道 不喜歡你的style kkk include include incl...