为什么这样能a:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<cctype>
#include<cstdlib>
#include<iomanip>
#include<vector>
#include<stack>
//#include<map>
#include<queue>
#include<list>
using namespace std;
struct node
{
int x,y;
};
int n,m;
char map[104][104];
int xy[3][10]={{},{0,-1,-1,-1,0,0,1,1,1},{0,-1,0,1,-1,1,-1,0,1}};
int sum;
queue<node> q;
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%s",map[i]);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(map[i][j]=='W')
{
q.push((node){i,j});
while(!q.empty())
{
node tmp=q.front();
q.pop();
for(int k=1;k<=8;k++)
{
int ux=tmp.x+xy[1][k],uy=tmp.y+xy[2][k];
if(ux<0 || ux>n || uy<0 || uy>m || map[ux][uy]!='W')
continue;
q.push((node){ux,uy});
map[ux][uy]='.';
}
}
sum++;
}
}
printf("%d",sum);
return 0;
}
而这样就不能:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<cctype>
#include<cstdlib>
#include<stack>
//#include<map>
#include<list>
#include<iomanip>
#include<queue>
using namespace std;
struct node
{
int x,y;
};
queue<node> q;
int xy[3][10]={{},{0,-1,-1,-1,0,0,1,1,1},{0,-1,0,1,-1,1,-1,0,1}};
int n,m;
string tmp;
int map[120][120];
int ans;
int main()
{
memset(map,0,sizeof(map));
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>tmp;
for(int j=0;j<m;j++)
{
switch(tmp[j])
{
case 'W':
map[i][j+1]=1;
default:
break;
}
}
}
/*
for(int i=1;i<=n;i++,cout<<endl)
for(int j=1;j<=m;j++)
cout<<map[i][j];
*/
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(map[i][j]==1)
{
q.push((node){i,j});
while(!q.empty())
{
node u=q.front();
q.pop();
for(int k=1;k<=8;k++)
{
int x=u.x+xy[1][k],y=u.y+xy[2][k];
if(x<1 || x>=n || y<1 || y>=m || map[x][y]==0)
continue;
q.push((node){x,y});
map[i][j]=0;
}
}
ans++;
}
cout<<ans;
return 0;
}