2 条题解

  • 0
    @ 2024-7-23 23:28:58
    //t1
    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=1e3+10;
    int n,m,ans,s[N][N];
    bool ff[N][N],f[N][N],t[N][N];
    char a[N][N];
    int dx[15]={0,-1,0,0,1};
    int dy[15]={0,0,-1,1,0};
    
    void DFS_FindGround(int x,int y)
    {
    	if(f[x][y]==1)return;
    	ans++;
    	f[x][y]=1;
    	for(int i=1;i<=4;++i)
    	{
    		int xx=x+dx[i];
    		int yy=y+dy[i];
    		if(xx>=1&&yy>=1&&xx<=n&&yy<=m && a[xx][yy]=='_')
    		{
    			DFS_FindGround(xx,yy);
    		}
    	}
    	return;
    }
    
    void DFS(int x,int y)
    {
    	if(ff[x][y]==1)return;
    	ff[x][y]=1;
    	for(int i=1;i<=4;++i)
    	{
    		int xx=x+dx[i];
    		int yy=y+dy[i];
    		if(xx>=1&&yy>=1&&xx<=n&&yy<=m)
    		{
    			if(t[xx][yy]==0 && a[xx][yy]=='W')
    			    t[xx][yy]=1,s[xx][yy]+=ans;
    			else if(a[xx][yy]=='_')
    			    DFS(xx,yy);
    		}
    	}
    	return;
    }
    
    int main()
    {
    	cin>>n>>m;
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=1;j<=m;++j)
    		{
    			cin>>a[i][j];
    		}
    	}
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=1;j<=m;++j)
    		{
    			if(a[i][j]=='_' && f[i][j]==0)
    			{
    				ans=0;
    				DFS_FindGround(i,j);
    				memset(ff,0,sizeof(ff));
    				memset(t,0,sizeof(t));
    				DFS(i,j);
    			}
    		}
    	}
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=1;j<=m;++j)
    		{
    			if(a[i][j]=='_')printf("_");
    			else printf("%d",(s[i][j]+1)%10);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    

    信息

    ID
    3088
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    67
    已通过
    17
    上传者