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()函数被调用了几次,就有几个连通块

你可能感兴趣的:(dfs检验连通性)