題意有些不清晰容易迷惑,注意2點:
//向四周擴散是上下左右
//岩漿可以把障礙物融化的意思是(並不是廢話!):不能直接把障礙物#設為訪問過的點(這樣是90分,以後注意盡量分情況考慮不會錯!),因為可能通過它向四周擴散!!!
//另外注意,bfs好習慣寫法,大前提最好放方面 結構更清晰 且 不易錯!
(因為岩漿遇到障礙物照樣可以過,所以可以用所謂的曼哈頓距離求,即橫座標-橫座標+縱座標-縱座標)
題目思路:本質就是比岩漿和小樂樂誰先到達終點而已!(所以2遍bfs是最好的,也可以想象成乙個人在追另乙個人)
1 #include 2 #include 3using
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.小樂樂每走一次只能上下左右四個方向...