求助,两个样例对了但是交了全wa了
查看原帖
求助,两个样例对了但是交了全wa了
550898
xjx199楼主2024/1/20 11:50
#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,-1,0,1};
int dy[4]={-1,0,1,0};
int k[10001][10001];
int n,m;
int x,y,tx,ty;
int xx,yy;
int vis[10001][10001];
int ans;
char c[10001][10001];
struct node{
	int x,y;
};
void bfs(int x,int y)
{
	if(c[x][y]=='0'&&vis[x][y]==0) vis[x][y]=1;
	else return;
	queue<node>q;
	q.push({x,y});
	while(!q.empty())
	{
		xx=q.front().x;
		yy=q.front().y;
		for(int i=1;i<4;i++)
		{
			tx=xx+dx[i];
			ty=yy+dy[i];
			if(tx>0&&tx<=n&&ty>0&&ty<=m&&!vis[tx][ty]&&c[tx][ty]!='*')
			{
				vis[tx][ty]=1;//标记走过了 
				q.push({tx,ty});
				bfs(tx,ty);
			}
		}
		q.pop();
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>c[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if((i==1 || i==n) || (j==1 || j==m)) bfs(i,j);
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
    		if(vis[i][j]==0 && c[i][j]!='*')
    		{
    			ans++;
			}
		}
	}
	cout<<ans;
	return 0;
}
2024/1/20 11:50
加载中...