2 solutions

  • 2
    @ 2022-1-6 19:07:59

    深搜做法

    #include<iostream>
    using namespace std;
    int n,m,ans=0,sum;
    int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
    int ma[110][110];
    void dfs(int x,int y){
    	sum++;
    	ans=max(ans,sum);
    	int t=ma[x][y];
    	ma[x][y]=-1;
    	for(int i=0;i<4;i++){
    		int xx=x+dx[i];
    		int yy=y+dy[i];
    		if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&ma[xx][yy]==t)
    			dfs(xx,yy);
    	}
    }
    int main() {
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++){
    			char temp;
    			cin>>temp;
    			ma[i][j]=temp-'0';
    		}
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    			if(ma[i][j]!=-1){
    				sum=0;
    				dfs(i,j);
    			}
    	cout<<ans<<endl;
    	return 0;
    }
    
    • 1
      @ 2022-4-12 22:20:52

      dfs

      #include<iostream>
      using namespace std;
      int n,m;
      const int N=1010;
      char ch[N][N];
      bool st[N][N];
      int dx[4]={0,0,1,-1};
      int dy[4]={1,-1,0,0};
      int sum;
      int dfs(int x,int y)
      {
      	st[x][y]=true;
      	sum++;
      	for(int i=0;i<4;i++)
      	{
      		int xx=x+dx[i],yy=y+dy[i];
      		if(xx>=0&&yy>=0&&xx<n&&yy<m&&ch[xx][yy]==ch[x][y]&&!st[xx][yy])
      			dfs(xx,yy);
      	}
      	return sum;
      }
      int main(){
      	cin>>n>>m;
      	for(int i=0;i<n;i++)
      		for(int j=0;j<m;j++)
      			cin>>ch[i][j];
      	int maxn=-1;
      	for(int i=0;i<n;i++)
      	{
      		for(int j=0;j<m;j++)
      		{
      			if(!st[i][j])
      			{
      				sum=0;
      				int t=dfs(i,j);
      				maxn=max(maxn,t);
      			}
      		}
      	}
      	cout<<maxn;
      	return 0;
      }
      

      bfs

      #include<iostream>
      #include<queue>
      using namespace std;
      typedef pair<int,int> PAII;
      int n,m,sum;
      const int N=1010;
      char ch[N][N];
      bool st[N][N];
      int dx[4]={0,0,1,-1};
      int dy[4]={1,-1,0,0};
      int bfs(int x,int y)
      {
      	sum++;
      	queue<PAII> q;
      	st[x][y]=true;
      	q.push({x,y});
      	while(q.size())
      	{
      		auto t=q.front();
      		q.pop();
      		int a=t.first,b=t.second;
      		for(int i=0;i<4;i++)
      		{
      			int xx=a+dx[i],yy=b+dy[i];
      			if(xx>=0&&yy>=0&&xx<n&&yy<m&&ch[xx][yy]==ch[x][y]&&!st[xx][yy])
      			{
      				sum++;
      				q.push({xx,yy});
      				st[xx][yy]=true;
      			}
      		}
      	}
      	return sum;
      }
      int main(){
      	cin>>n>>m;
      	for(int i=0;i<n;i++)
      		for(int j=0;j<m;j++)
      			cin>>ch[i][j];
      	int maxn=-1;
      	for(int i=0;i<n;i++)
      	{
      		for(int j=0;j<m;j++)
      		{
      			if(!st[i][j])
      			{
      				sum=0;
      				int t=bfs(i,j);
      				maxn=max(maxn,t);
      			}
      		}
      	}
      	cout<<maxn;
      	return 0;
      }
      
      • 1

      Information

      ID
      717
      Time
      1000ms
      Memory
      64MiB
      Difficulty
      7
      Tags
      # Submissions
      248
      Accepted
      63
      Uploaded By