3-9 H: 新冠病毒的传播

题目描述

最近新冠病毒疫情非常严重,由于我们国家采取了有力的措施,才没有使疫情进一步的扩大。今天,作为计算机专业的学生,我们来用程序模拟一下各种情况下的新冠病毒传播情况。现在给定一个n * m的网格,每个网格可以有以下三个值之一:
值 0 代表隔离带。
值 1 代表健康人群。
值 2 代表感染人群。
每天,任何与感染人群(在 4 个正方向上)相邻的健康人都会感染。如果遇到隔离带,病毒就会被阻断。
输出直到单元格中没有健康人为止所必须经过的最小天数。如果不可能所有人都被感染,输出 -1。

输入

测试数据由多组测试样例组成。第一行输入两个正整数 n ( 1 <= n <= 500 ) 和 m ( 1 <= m <= 500 ),
接下来输入n * m个数字,数字均由 0 , 1 ,2构成

输出

每组测试样例,输出直到单元格中没有健康人为止所必须经过的最小天数。如果不可能,输出 -1。

样例输入 Copy

3 3
2 1 1
1 1 0
0 1 1
3 3
2 1 1
0 1 1
1 0 1
1 2
0 2

样例输出 Copy

4
-1
0

思路:

每次找到感染者,然后扩散四周(不能超过边界,是没有得病的人)

fx.x >= 0 && fx.x < n && fx.y >= 0 && fy.y < m && a [ fx.x ] [ fx.y ] == 1 ;

简单的bfs题目。。。。

AC代码:

#include<bits/stdc++.h>
using namespace std;
 
int n,m,s,f,maxs;
int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int a[505][505];
int b[505][505];
struct ma{
    int x;
    int y;
    int s;
}w;
queue<ma>q;
int main(){
    while(cin>>n>>m){
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                scanf("%d",&a[i][j]);
                if(a[i][j]==2){
                    w.x=i;
                    w.y=j;
                    w.s=0;
                    q.push(w);
                }
            }
        }
        maxs=0;
        while(!q.empty()){
            ma fx,fy;
            fx=q.front();
            q.pop();
            if(maxs<fx.s)maxs=fx.s;
            for(int i=0;i<4;i++){
                fx.x+=d[i][0];
                fx.y+=d[i][1];
                if(fx.x>=0&&fx.x<n&&fx.y>=0&&fy.y<m&&a[fx.x][fx.y]==1){
                    a[fx.x][fx.y]=2;
                    fx.s++;
                    q.push(fx);
                    fx.s--;
                }
                fx.x-=d[i][0];
                fx.y-=d[i][1];
            }
        }
        f=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(a[i][j]==1){
                    f=1;
                }
            }
        }
        if(f==1){
            cout<<-1<<endl;
        }else{
            cout<<maxs<<endl;
        }
    }
    return 0;
}
发布了34 篇原创文章 · 获赞 6 · 访问量 1346

猜你喜欢

转载自blog.csdn.net/qq_44669377/article/details/104750518
9 H