题目
1791.找出星型图的中心节点
题目大意
有一个无向的 星型 图,由 n
个编号从 1
到 n
的节点组成。星型图有一个 中心 节点,并且恰有 n - 1
条边将中心节点与其他每个节点连接起来。
给你一个二维整数数组 edges
,其中 edges[i] = [ui, vi]
表示在节点 ui
和 vi
之间存在一条边。请你找出并返回 edges
所表示星型图的中心节点。
样例
数据规模
思路
定义一个数组 i n d ind ind记录每个点的度数,每次对 e d g e s edges edges的元素进行计数,每个元素中的两个参数都是点,每次对 i n d [ i ] , i n d [ j ] ind[i],ind[j] ind[i],ind[j]进行加一操作,然后遍历 1 1 1~ n n n,如果有元素 i i i,它的 i n d [ i ] ≠ 1 ind[i]≠1 ind[i]=1,那么它一定是中心节点。
那么就可以有推论:
选择 e d g e s [ 0 ] edges[0] edges[0] 和 e d g e s [ 1 ] edges[1] edges[1]这两条边,则星型图的中心节点是 e d g e s [ 0 ] [ 0 ] edges[0][0] edges[0][0] 或者 e d g e s [ 0 ] [ 1 ] edges[0][1] edges[0][1]。如果 e d g e s [ 0 ] [ 0 ] edges[0][0] edges[0][0]和 e d g e s [ 1 ] edges[1] edges[1]中两个节点之一相同,则 e d g e s [ 0 ] [ 0 ] edges[0][0] edges[0][0]是星型图的中心节点,否则 e d g e s [ 0 ] [ 1 ] edges[0][1] edges[0][1]是星型图的中心节点
代码
class Solution {
public:
int findCenter(vector<vector<int>>& edges) {
vector<int>ind(edges.size()+5);
for(auto it:edges){
ind[it[0]]++;ind[it[1]]++;
}
for(int i=1;i<=edges.size()+1;i++){
if(ind[i]!=1){
return i;
}
}
return 1;
}
};