第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记录,为啥不可以佬们