好奇怪,第一种bfs在将点取出时再改成'.',竟然有两个点过不了
#include<bits/stdc++.h>
using namespace std;
int n,m;
int dh[9]={0,-1,-1,-1,0,0,1,1,1};
int dl[9]={0,-1,0,1,-1,1,-1,0,1};
char Map[109][109];
int ans;
struct Info
{
int x,y;
};
int Judge(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=m&&Map[x][y]=='W';
}
void BFS(int x,int y)
{
queue<Info> q;
q.push((Info){x,y});
Info Cur,Nex;
while(!q.empty())
{
Cur=q.front();
q.pop();
Map[Cur.x][Cur.y]='.';
for (int i=1;i<=8;i++)
{
if (Judge(Cur.x+dh[i],Cur.y+dl[i]))
{
Nex.x=Cur.x+dh[i];
Nex.y=Cur.y+dl[i];
q.push(Nex);
}
}
}
}
int main()
{
cin>>n>>m;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
cin>>Map[i][j];
}
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if (Map[i][j]=='W')
{
ans++;
BFS(i,j);
}
}
}
cout<<ans;
return 0;
}
修改成找到点之后先改为'.'就过了
#include<bits/stdc++.h>
using namespace std;
int n,m;
int dh[9]={0,-1,-1,-1,0,0,1,1,1};
int dl[9]={0,-1,0,1,-1,1,-1,0,1};
char Map[109][109];
int ans;
struct Info
{
int x,y;
};
int Judge(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=m&&Map[x][y]=='W';
}
void BFS(int x,int y)
{
queue<Info> q;
q.push((Info){x,y});
Info Cur,Nex;
Map[x][y]='.';
while(!q.empty())
{
Cur=q.front();
q.pop();
for (int i=1;i<=8;i++)
{
if (Judge(Cur.x+dh[i],Cur.y+dl[i]))
{
Nex.x=Cur.x+dh[i];
Nex.y=Cur.y+dl[i];
Map[Nex.x][Nex.y]='.';
q.push(Nex);
}
}
}
}
int main()
{
cin>>n>>m;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
cin>>Map[i][j];
}
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if (Map[i][j]=='W')
{
ans++;
BFS(i,j);
}
}
}
cout<<ans;
system("pause");
return 0;
}
why???