L - 病毒扩散(暴力)
生活随笔
收集整理的这篇文章主要介绍了
L - 病毒扩散(暴力)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
Description
2019-ncov的突然出现扰乱了人们的日常生活,它具有极强的传染性,可以快速的在人群中扩散,现在研究人员正在模拟其在人群中的扩散情况.
在一个n*m矩阵所示的人群中,*为普通人,#为佩戴口罩的人,@为病毒携带者,已知每秒每位病毒携带者会将病毒传染给相邻八个方向的未戴口罩的普通人。请问 x 秒后会有多少名传染者(初始为第0秒)?
Input
第一行输入空格分隔的三个数n,m,x代表n行,m列的空间,x秒(n,m<=1000)。
接下来n行每行m人如上述所示。
Output
一个数字,代表最终被传染的人数。
Sample
Input
Output
12 #include<bits/stdc++.h>using namespace std;const int N = 1111;char mp[N][N];//存图 int dp[N][N];//标记数组int main() {int n, m, x;cin >> n >> m >> x;int cnt = 0;memset(dp, 0, sizeof(dp));for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){cin >> mp[i][j];if(mp[i][j] == '@')cnt++;}}int pos = 0;//当前的秒数while(x--){for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(mp[i][j] == '@' && dp[i][j] == pos){if(mp[i - 1][j] == '*')//上{mp[i - 1][j] = '@';dp[i - 1][j] = pos + 1;cnt++;}if(mp[i + 1][j] == '*') //下{mp[i + 1][j] = '@';dp[i + 1][j] = pos + 1;cnt++;}if(mp[i][j - 1] == '*')//左{mp[i][j - 1] = '@';dp[i][j - 1] = pos + 1;cnt++;}if(mp[i][j + 1] == '*')//右{mp[i][j + 1] = '@';dp[i][j + 1] = pos + 1;cnt++;}if(mp[i - 1][j - 1] == '*')//左上{mp[i - 1][j - 1] = '@';dp[i - 1][j - 1] = pos + 1;cnt++;}if(mp[i - 1][j + 1] == '*')//右上{mp[i - 1][j + 1] = '@';dp[i - 1][j + 1] = pos + 1;cnt++;}if(mp[i + 1][j - 1] == '*')//左下{mp[i + 1][j - 1] = '@';dp[i + 1][j - 1] = pos + 1;cnt++;}if(mp[i + 1][j + 1] == '*')//右下{mp[i + 1][j + 1] = '@';dp[i + 1][j + 1] = pos + 1;cnt++;}}}}pos++;}cout << cnt << endl;return 0; }总结
以上是生活随笔为你收集整理的L - 病毒扩散(暴力)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: K - 老鼠走迷宫(DFS)
- 下一篇: 魔戒(BFS+四维数组)