(并查集的应用)LeetCode#547. Friend Circles

来源:互联网 发布:php class unset 编辑:程序博客网 时间:2024/06/04 19:44
  • 题目:一个二维数组m*m,表示m个人的某两个人是否具有朋友关系,通过直接或间接联系,将人划分为不同的圈子,求最终圈子数
  • 难度:Medium
  • 思路:根据题意,这一题可以用Union-Find进行解题。
  • 代码:
public class Solution {    public int findCircleNum(int[][] M) {        if(M == null || M.length == 0){            return 0;        }        int len = M.length;        int count = len;        int[] id = new int[len];        //初始化,将每一个人都划分为一个圈子        for(int i = 0; i < len; i++){            id[i] = i;        }        //合并        for(int i = 0; i < len; i++){            for(int j = 0; j < len; j++){                if(i != j){                    if(id[i] != id[j]){                        if(M[i][j] == 1){                            int pid = id[i];//查找                            int qid = id[j];                            //这一层for循环用于更新小组编号                            for(int k = 0; k < len; k++){                                if(id[k] == pid){                                    id[k] = qid;                                }                             }                            count--;                        }                    }                }            }        }        return count;    }}
原创粉丝点击