leetcode-547. Friend Circles

来源:互联网 发布:人工智能科技园 编辑:程序博客网 时间:2024/05/03 15:28

考察点:并查集;
出错点:

  • 第一次出错在union上,重名了
  • 第二次出错在在find函数中应该是i=UF【i】的,结果写反了,看来每一步代码都应该明确之后才能写出来。

C++ 代码:

class Solution {public:    vector<int> UF;    vector<int> size;    int count;    int find(int i){        while (UF[i] != i)            i=UF[i];        return i;    };    void union1(int i, int j){        int ii=find(i);        int jj = find(j);       // cout<<"i="<<i<<";j="<<j<<" ii:"<<ii<<" jj"<<jj<<endl;        if (ii == jj)            return;        if (size[ii] <size[jj]) {            UF[ii] = jj;            //cout<<ii<<" "<<jj<<endl;            size[jj] += size[ii];            count--;        } else {            UF[jj] = ii;            //cout<<jj<<" "<<ii<<endl;            size[ii] += size[jj];            count--;        }    }    void init(int len) {        for (int i=0; i<len; i++) {            UF.push_back(i);            size.push_back(1);        }        count = len;    }    int findCircleNum(vector<vector<int>>& M) {        int len = M.size();        if (len == 0)            return 0;        init(len);        for (int i=0; i<len; i++) {            for (int j=i+1; j<len; j++) {                if (M[i][j] == 1) {                    union1(i, j);                }            }        }        return count;    }};
0 0