1 条题解

  • 0
    @ 2026-10-4 0:37:59
    #include<bits/stdc++.h>  //声名头文件
    using namespace std;
    #define ll long long
    int n,m,Map[510][510],ans=0;
    bool vis[510][510];
    int movex[4]={1,0,-1,0};
    int movey[4]={0,1,0,-1};
    map<string,int>mp;
    void dfs(int x,int y,string &w)
    {
    	for(int i=0;i<4;i++)
    	{
    		int nx=movex[i]+x;
    		int ny=movey[i]+y;
    		if(nx>=1&&nx<=n&&ny>=1&&ny<=m)
    		{
    			if(vis[nx][ny]==true||Map[nx][ny]!=Map[x][y])
    			{
    				continue;
    			}
    			w+=char(i+'0');
    			vis[nx][ny]=true;
    			dfs(nx,ny,w);
    		}
    	}
    	w+=' ';
    }
    int main()  //主函数是程序的入口
    {
    	//freopen("文件.in","r",stdin);
    	//freopen("文件.out","w",stdout);
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cout.tie(0);
    	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(!vis[i][j])
    			{
    				vis[i][j]=true;
    				string w;//w串处理连接
    				dfs(i,j,w);
    				if(!mp[w]) ans++;
    				mp[w]=1;
    			}
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    
    

    信息

    ID
    3535
    时间
    1000ms
    内存
    512MiB
    难度
    普及
    标签
    递交数
    1
    通过
    1
    上传者