标签:using 区域 inpu while sam false 接下来 通过 col
这道题主要考的是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"; }
谢谢阅读
标签:using 区域 inpu while sam false 接下来 通过 col
原文地址:https://www.cnblogs.com/tianbowen/p/11332013.html