专栏文章

8.23总结

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio6e5sf
此快照首次捕获于
2025/12/02 14:06
3 个月前
此快照最后确认于
2025/12/02 14:06
3 个月前
查看原文
T6
CPP
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,a[5050][5050],ans=1,dx[4]={1, -1, 0, 0},dy[4]={0, 0, 1, -1},vis[5050][5050],cnt, color;
void dfs(int x, int y) 
{
    for (int i=0;i<4;i++) 
	{
        int p=x+dx[i],q=y+dy[i];
        if (p<1||p>n||q<1||q>m||vis[p][q]==color||a[p][q]==1) //判定 
		{
			continue;
		}
        vis[p][q]=color;//染色 
        cnt++;//结果加一 
        if (a[p][q]==2) 
		{
			continue;
		}
        dfs(p, q);
    }
}

int main() 
{
    cin>>n>>m;
    for (int i=1;i<=n;i++) 
	{
        for (int j=1;j<=m;j++) 
		{
            char c;
            cin>>c;
            if (c=='#') //当前位置是障碍 
			{
				a[i][j]=1;
			}
            else 
			a[i][j]=0;
        }
    }
    for (int i=1;i<=n;i++) 
	{
        for (int j=1;j<=m;j++) 
		{
            if (a[i][j]==1) 
			{
				continue;
			}
            if(a[i-1][j]==1||a[i+1][j]==1||a[i][j-1]==1||a[i][j+1]==1) //不能动的位置 
			{
                a[i][j]=2;
            }
        }
    }

    for (int i=1;i<=n;i++) 
	{
        for (int j=1;j<=m;j++) 
		{
            if(vis[i][j]==0&&a[i][j]==0) 
			{
                cnt=1;
                color++;
                vis[i][j]=color;//启点染色 
                dfs(i,j);
                ans=max(ans, cnt);
            }
        }
    }
    cout<<ans;
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...