第5题:
很简单一个bfs就可以
#include<iostream> #include<vector> #include<string> #include<stack> #include<queue> using namespace std; typedef pair<int,int> PII; int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; int n = 30;int m = 40; int g[31][41]; char tg[31][41]; int bfs(int x,int y) { queue<PII> q; PII p = {x,y}; q.push(p); g[x][y] = 2; while (!q.empty()) { PII p = q.front(); q.pop(); int x = p.first;int y = p.second; for (int i = 0; i < 4; i++) { int nx = x + dx[i];int ny = y + dy[i]; if (nx >= 0 && nx <= n && ny >= 0 && ny <= m && g[nx][ny] == 0) { g[nx][ny] = 2; q.push({nx, ny}); } } } } int main() { for (int i = 1 ;i <= n;i++) { for (int j = 1; j <= m; j++) { cin >> tg[i][j]; g[i][j] = tg[i][j] - '0'; } cout << endl; } bfs(1,1); int res = 0; for (int i = 1 ;i <= n;i++) { for (int j = 1; j <= m; j++) if( g[i][j] == 2) res++; } cout << res; return 0; }
答案591
另外有没有佬知道为啥这样写不行:
#include<iostream> #include<vector> #include<string> #include<stack> #include<queue> using namespace std; typedef pair<int,int> PII; int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; int n = 30;int m = 40; int g[31][41]; char tg[31][41]; int cnt = 0; int re; vector<pair<int,int>> v; int bfs(int x,int y) { queue<PII> q; PII p = {x,y}; q.push(p); g[x][y] = 2; while (!q.empty()) { PII p = q.front(); q.pop(); cnt++; int x = p.first;int y = p.second; for (int i = 0; i < 4; i++) { int nx = x + dx[i];int ny = y + dy[i]; if (nx >= 0 && nx <= n && ny >= 0 && ny <= m && g[nx][ny] == 0) { g[nx][ny] = 2; v.push_back({nx,ny}); q.push({nx,ny}); } } } } int main() { for (int i = 1 ;i <= n;i++) { for (int j = 1; j <= m; j++) { cin >> tg[i][j]; g[i][j] = tg[i][j] - '0'; } } bfs(1,1); cout << cnt << endl; return 0; }
这里用cnt记录,为啥不可以佬们