1 条题解

  • 0
    @ 2025-10-10 15:46:00

    C++ :

    #include<bits/stdc++.h>
    using namespace std;  
    //四个可以走的方向 
    int fx[5]={0,1,-1,0,0};  
    int fy[5]={0,0,0,1,-1};  
    
    //泳池的深度 
    int swim[101][101];  
    
    //标记是否走过 
    bool f[101][101];  
    int n,m,ans;  
    
    //从x、y位置开始 
    int find(int x,int y)  
    {  
        //如果该路线没走过 
        if(f[x][y] == false){ 
    	    int tot=1;  
    	    //标记为走过 
    	    f[x][y]=true;  
    	    //遍历四个方向 
    	    for(int i=1;i<=4;++i)  
    	    {  
    	        //将要走到的位置 
    	        int dx=x+fx[i];  
    	        int dy=y+fy[i];  
    	        //如果将要走到的位置和本位置相同,且不越界 
    	        if(swim[x][y]==swim[dx][dy]&&dx>0&&dy>0&&dx<=n&&dy<=m&&!f[dx][dy])  
    	                tot+=find(dx,dy);  
    	    }  
    	    return tot;  
        } else{
        	return 0;
    	} 
        
    }  
    int main()  
    {  
        cin>>n>>m;
        string c;
    	//计算二维数组的值  
        for(int i=1;i<=n;++i)  
        {  
            cin>>c;  
            for(int j=0;j<m;++j) swim[i][j+1]=c[j]-'0';
        }  
        //循环从每个点开始回溯找最大面积 
        for(int i=1;i<=n;++i)  
            for(int j=1;j<=n;++j)  
                ans=max(ans,find(i,j));  
        cout<<ans<<endl;
        return 0;  
    }
    
    

    Java :

    import java.util.Scanner;
    import java.util.Stack;
    public class Main {
    	public static void main(String[]args){
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		int m = sc.nextInt();
    		if(n>=1&&n<=100&&m>=1&&m<=100){
    			int[][]map = new int[n+2][m+2];				  
    			int[][]move = {{0,1},{0,-1},{1,0},{-1,0}};
    			for(int i=0 ;i<n+2 ;i++){
    				map[i][0] = 0;
    				map[i][m+1] = 0;
    			}
    			for(int i=0 ;i<m+2 ;i++){
    				map[0][i] = 0;
    				map[n+1][i] = 0;
    			}
    			String[]s = new String[n];
    			for(int i=0 ;i<n ;i++){
    				s[i] = sc.next();
    			}
    			for(int i=1 ;i<=n ;i++){
    				for(int j=1 ;j<=m ;j++){
    					map[i][j] = s[i-1].charAt(j-1)-48;
    				}
    			}
    			Stack s1 = new Stack();	
    			int result = Dfs(map,s1,move,n,m);
    			System.out.println(result);
    		}
    		
    	}
    	public static int Dfs(int[][]maze,Stack s,int[][]move,int n,int m){	
    		int Max = Integer.MIN_VALUE;
    		int[][]visited = new int[n+1][m+1];
    		for(int i=1 ;i<=n;i++){
    			for(int j=1 ;j<=m;j++){								
    					int times = 0;
    					visited[i][j]=-1;
    					Step temp = new Step(i,j,-1);			
    					s.push(temp);								
    					while(!s.isEmpty()){
    						temp = (Step) s.peek();
    						int x = temp.x;
    						int y = temp.y;
    						int d = temp.d+1;
    						while(d<4){
    							int xx = x+move[d][0];
    							int yy = y+move[d][1];
    							if(maze[x][y] == maze[xx][yy]&&visited[xx][yy]==0){
    								temp = new Step(xx,yy,-1);			
    								s.push(temp);
    								x=xx;
    								y=yy;
    								visited[x][y]=-1;
    								d=0;			
    								
    							}else{
    								d++;
    							}
    						}
    						if(d==4){						
    							s.pop();
    							times++;				
    						}
    					}
    					if(times>Max){
    						Max = times;
    					}
    			}
    				}
    		return Max;
    	}
    }
    class Step{												
    	int x,y,d;
    	Step(int x,int y,int d){
    		this.x = x;
    		this.y = y;
    		this.d = d;
    	}
    }
    
    
    
    • 1

    信息

    ID
    360
    时间
    1000ms
    内存
    64MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者