1 条题解
-
0
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
- 上传者