美文网首页
P35-省份数量-深度递归

P35-省份数量-深度递归

作者: YonchanLew | 来源:发表于2021-05-25 00:17 被阅读0次
//省份数量
/*
* 有n个城市,其中一些彼此相连,另一些没有相连。如果城市a与城市b直接相连,且城市b与城市c直接相连,
* 那么城市a与城市c间接相连
* 省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。
* 给你一个 n * n 的矩阵 isConnected,其中isConnected[i][j]=1表示第i个城市和第j个城市直接相连,
* 而isConnected[i][j]=0表示二者不直接相连
* 返回矩阵中省份(直接或间接相连的是一个省,没有关联的是另一个省)的数量
* */
public class P35 {
    public static void main(String[] args) {
        System.out.println(getProvince(new int[][]{{1,1,0},{1,1,0},{0,0,1}}));  //2
        System.out.println(getProvince(new int[][]{{1,0,0},{0,1,0},{0,0,1}}));  //3
    }

    //深度优先
    private static int getProvince(int[][] citiesConnected) {

        int cities = citiesConnected.length;        //城市数
        boolean[] visited = new boolean[cities];    //标记是否已经访问过

        int provinces = 0;

        for(int i=0; i<cities; i++){
            if(!visited[i]){        //城市未被访问
                //深度优先dfs
                dfs(i, cities, visited, citiesConnected);
                provinces++;
            }
        }

        return provinces;
    }

    private static void dfs(int i, int cities, boolean[] visited, int[][] citiesConnected) {
        for(int j=0; j<cities; j++){
            if(citiesConnected[i][j] == 1 && !visited[j]){
                visited[j] = true;      //打上标记,不再访问,代表j这个城市是属于i整个城市的省份了
                dfs(j, cities, visited, citiesConnected);       //深度递归,找j城市的关联
            }
        }
    }

}

相关文章

网友评论

      本文标题:P35-省份数量-深度递归

      本文链接:https://www.haomeiwen.com/subject/djbrjltx.html