P1451 求细胞数量(dfs,洛谷,java)

洛谷链接:https://www.luogu.com.cn/problem/P1451

在这里插入图片描述

import java.util.Scanner;
public class Main {
	
	static int n=0,m=0,ans=0;
	static int[][] a=new int[105][105];
	static boolean[][] used=new  boolean[105][105];   //标记是否走过,保持原数组不变
	static int[] dx={-1,1,0,0};
	static int[] dy={0,0,-1,1};
	
	public static void dfs(int x,int y) {
		used[x][y]=true;  //已经走过
		for(int i=0;i<4;i++) {
			int nx=x+dx[i];
			int ny=y+dy[i];
			
			if(a[nx][ny]==0  ||  used[nx][ny]==true)  continue;  //返回走下一个方向
			dfs(nx,ny);  //走
		}
	}
	
	public static void main(String[] args) {	
		Scanner in=new Scanner(System.in);
        n=in.nextInt();
        m=in.nextInt();
        
        for(int i=1;i<=n;i++) {
        	String s=in.next();
        	for(int j=1;j<=m;j++) {
        		char c=s.charAt(j-1);
        		a[i][j]=c-'0';
        	}
        }
        
        for(int i=1;i<=n;i++) {
        	for(int j=1;j<=m;j++) {
        		if(used[i][j]==false  &&  a[i][j]!=0) {
        			//如果该点没走过     并且    该点不是0(属于细胞数字)
        			dfs(i,j);
        			ans++;
        		}
        	}
        }
        System.out.println(ans);
	}
}
发布了86 篇原创文章 · 获赞 46 · 访问量 1706

猜你喜欢

转载自blog.csdn.net/weixin_44685629/article/details/104264312
今日推荐