dfs检验连通性

思想
标记二维数组,假设有东西时为1,没东西时为0。设此二维数组中连通块数为time
遍历此二维数组,当遇到1时则dfs(如下面代码)

private static void testLink(int[][] arr,int i,int j) {
		arr[i][j]=0;	//把当前块标记为已访问
		if(i+1<=2&&arr[i+1][j]==1) testLink(arr, i+1, j);	//向上下左右四个方向扩张,直至和此块联通的全部被标记为已访问。
		//若五张邮票是连接在一起的,那么一次调用testLink就能把所有的块全部标记为0,即time=1,只有time最后等于1的时候五张邮票是连接在一起的。
		if(i-1>=0&&arr[i-1][j]==1) testLink(arr, i-1, j);
		if(j+1<=3&&arr[i][j+1]==1) testLink(arr, i, j+1);
		if(j-1>=0&&arr[i][j-1]==1) testLink(arr, i, j-1);
	}

每一次执行这段代码就将遍历遇到的二维数组中为1的那个块联通的所有块全部标记为了0。继续往下遍历时只会遇到不与此连通块连着的块为1,此块联通的块已经全部为0了。
遍历二维数组时testLink()函数被调用了几次,就有几个连通块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值