题解1235. 洪水 (Standard IO)
Posted tianbowen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解1235. 洪水 (Standard IO)相关的知识,希望对你有一定的参考价值。
这道题主要考的是bfs和预处理,我们模拟一下就能过,因为它的数据太蒻。
首先,我们读入整个地图,不断地扫描整个地图,然后每一次发现岩浆就将它合法扩散。
然后我们处理人,这就要跑一遍bfs了,找到就输出,不然就输出KAKTUS。
下面上代码:
#include<iostream> #include<cstdio> using namespace std; int tim,n,m,last; bool p; char mp[200][200][200]; void before() for(int i=1;i<=180;i++) for(int j=1;j<=n;j++) for(int k=1;k<=m;k++) if(mp[j][k][i-1]==‘*‘) if(mp[j+1][k][i]!=‘D‘&&mp[j+1][k][i]!=‘X‘) mp[j+1][k][i]=‘*‘; if(mp[j][k+1][i]!=‘D‘&&mp[j][k+1][i]!=‘X‘) mp[j][k+1][i]=‘*‘; if(mp[j-1][k][i]!=‘D‘&&mp[j-1][k][i]!=‘X‘) mp[j-1][k][i]=‘*‘; if(mp[j][k-1][i]!=‘D‘&&mp[j][k-1][i]!=‘X‘) mp[j][k-1][i]=‘*‘; int main() ios::sync_with_stdio(false); cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>mp[i][j][0]; for(int k=1;k<=180;k++) mp[i][j][k]=mp[i][j][k-1]; before(); while(tim<=180) tim++; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(mp[i][j][tim-1]==‘S‘) if(mp[i+1][j][tim]==‘D‘) cout<<tim; return 0; if(mp[i][j+1][tim]==‘D‘) cout<<tim; return 0; if(mp[i-1][j][tim]==‘D‘) cout<<tim; return 0; if(mp[i][j-1][tim]==‘D‘) cout<<tim; return 0; if(mp[i+1][j][tim]==‘.‘) mp[i+1][j][tim]=‘S‘; if(mp[i][j+1][tim]==‘.‘) mp[i][j+1][tim]=‘S‘; if(mp[i-1][j][tim]==‘.‘) mp[i-1][j][tim]=‘S‘; if(mp[i][j-1][tim]==‘.‘) mp[i][j-1][tim]=‘S‘; cout<<"KAKTUS";
谢谢阅读
以上是关于题解1235. 洪水 (Standard IO)的主要内容,如果未能解决你的问题,请参考以下文章