牛客哈理工小樂樂打遊戲(bfs深度理解好題)

2022-06-24 15:06:08 字數 1665 閱讀 5879

題意有些不清晰容易迷惑,注意2點:

//向四周擴散是上下左右

//岩漿可以把障礙物融化的意思是(並不是廢話!):不能直接把障礙物#設為訪問過的點(這樣是90分,以後注意盡量分情況考慮不會錯!),因為可能通過它向四周擴散!!!

//另外注意,bfs好習慣寫法,大前提最好放方面 結構更清晰 且 不易錯!

(因為岩漿遇到障礙物照樣可以過,所以可以用所謂的曼哈頓距離求,即橫座標-橫座標+縱座標-縱座標)

題目思路:本質就是比岩漿和小樂樂誰先到達終點而已!(所以2遍bfs是最好的,也可以想象成乙個人在追另乙個人)

1 #include 2 #include 3

using

namespace

std;

4const

int maxn=1005;5

char

a[maxn][maxn];

6int

vis1[maxn][maxn],dis1[maxn][maxn];

7int

vis2[maxn][maxn],dis2[maxn][maxn];

8int

n,m;

9int

sx,sy,gx,gy,hx,hy;

10struct

px11

;15 px(int x,int

y):x(x),y(y){};

16}p;

1718

void

bfs1()

1943}44

//下45if(p.x+1

<=n)

4655}56

//上57if(p.x-1>=1)58

67}68//左69

if(p.y-1>=1)70

79}80}

81}8283

intbfs2()

84108

}109//下

110if(p.x+1

<=n)

111120

}121//上

122if(p.x-1>=1

)123

132}

133//

左134

if(p.y-1>=1

)135

144}

145}

146return0;

147}

148149

intmain()

150162

else

if(a[i][j]=='

e')

163else

if(a[i][j]=='

f')

164else

if(a[i][j]=='

#')

165}

166}

167168

bfs1();

169int ans=bfs2();

170if(ans) cout<<"

pig pig pig!

"<171else cout<<"

a! wo si la!

"<172173

for(int i=0;i<=n+1;i++) for(int j=0;j<=m+1;j++)

174}

175176

return0;

177 }

完。

牛客小樂樂打遊戲

題意 原文中文題意就不說了 題解 重點就是處理人每走一步,火山蔓延一層,怎麼控制這個關係,實驗室大佬看完題後,求火山口與人將走的點的曼哈頓距離有關 畫畫圖就是這樣。所以在bfs列舉四個方向的時候考慮下火山蔓延層數即可。include define ll long long using namespa...

哈理工院賽 小樂樂打遊戲

題目描述 小樂樂覺得學習太簡單了,剩下那麼多的時間好無聊,於是便想打遊戲。最近新出了乙個特別火的遊戲,叫吃豬,小樂樂準備玩一玩。吃豬遊戲很簡單,給定乙個地圖,大小為n m,在地圖中會隨機出現乙個火山口,只要小樂樂能逃離這個地圖,他便能吃豬!但吃雞遠沒有那麼簡單 1.小樂樂每走一次只能上下左右四個方向...

小樂樂打遊戲 入門BFS

題目描述 小樂樂覺得學習太簡單了,剩下那麼多的時間好無聊,於是便想打遊戲。最近新出了乙個特別火的遊戲,叫吃豬,小樂樂準備玩一玩。吃豬遊戲很簡單,給定乙個地圖,大小為n m,在地圖中會隨機出現乙個火山口,只要小樂樂能逃離這個地圖,他便能吃豬!但吃雞遠沒有那麼簡單 1.小樂樂每走一次只能上下左右四個方向...