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+四维数组)