一道站外题QwQ (广东石中出的)
Bob的小岛面临沙漠化的问题. Bob的小岛是一个R行C列的矩阵.
如果某个单元格是 'D',则表示该格子是沙漠,如果是'F'则表示该格子是森林。沙漠每年蔓延的趋势是:
(1)如果某格子是沙漠,则它永远都是沙漠。
(2)如果一个格子是森林,而且它相邻的四个格子(上、下、左、右)中如果至少有一个格子是沙漠,那么该格子的森林下一年将会变成沙漠。否则,该格子下一年还是森林.
问题是:过了T年后,小岛共有多少个格子是沙漠?
输入
第一行:三个整数,R、C、T. 1 <= R,C <= 1000,1<= T<=1000000000。
接下来是R行C列的矩阵。每个元素要么上‘D’要么是‘F’。
输出
一个整数,过了T年后,小岛共有多少个格子是沙漠?
输入格式 无
输出格式 无
输入/输出例子1 输入:5 5 2 FFFFF FFDFF FFFFD FFFFF FFFFF
输出:17
本蒟蒻的代码
#include<bits/stdc++.h>
using namespace std;
int n,m,t,ans,s,Map[1005][1005];
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
char c;
int js(){
int k=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
k+=Map[i][j];
return k;
}
void bfs(){
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(Map[i][j])
for(int k=0;k<4;k++){
int tx=dx[k]+i,ty=dy[k]+j;
if(tx>=1&&tx<=n&&ty>=1&&ty<=n)
Map[tx][ty]=1;
}
if(js()==m*n){
cout<<m*n;
exit(0);
}
}
int main(){
cin>>n>>m>>t;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>c;
if(c=='D')
Map[i][j]=1;
else
Map[i][j]=0;
}
bfs();
cout<<js();
return 0;
}
球球了ε=ε=ε=(#>д<)ノ
今天我做不出来我就4了w(゚Д゚)w
救救孩子吧