该题特考验语文水平,在leetcode上找到了一个通俗易懂的中文翻译:
读懂题意后,再解题就有思路了,本题采用并查集来搞定
1,按照并查集的套路建立好节点的关系
2,对initial数组中的每个节点,在parent中查找该节点所在的子图有多少个节点,记录每次节点查找的节点数,如果节点数大于之前记录的最大MAX,并且没有同一子图中没有两个感染的节点,则记录该索引,最后比较索引所在的节点,返回最小的节点
#define MAXSIZE 301
int parent[MAXSIZE];
int Find(int a)
{
if(parent[a] == a)
return a;
return parent[a] = Find(parent[a]);
}
void unioon(int i, int j)
{
int fi = Find(i);
int fj = Find(j);
if(fi != fj)
parent[fi] = fj;
return;
}
int getNode(int graphSize, int* initial, int initialSize )
{
int count = 0;
int max = 0;
int i,j;
int node = 1000;
//对initial数组中的每个节点,在parent中查找该节点所在的子图有多少个节点
//记录每次节点查找的节点数,如果节点数大于之前记录的最大MAX,并且没有同一子图中没有两个感染的节点,则记录该索引
//最后比较索引所在的节点,返回最小的节点
for(i=0; i max)
{
max = count;
node = initial[i];
}
else if(count == max && node > initial[i])
{
node = initial[i];
}
}
return node;
}
int minMalwareSpread(int** graph, int graphSize, int* graphColSize, int* initial, int initialSize)
{
int i,j;
//初始化parent数组,每个节点的父节点初始化为自己
for(i=0; i
最后运行结果:



