班上有 n 名學生。其中有些人是朋友,有些則不是。他們的友誼具有是傳遞性。如果已知 a 是 b 的朋友,b 是 c 的朋友,那麼我們可以認為 a 也是 c 的朋友。所謂的朋友圈,是指所有朋友的集合。
給定乙個 n * n 的矩陣 m,表示班級中學生之間的朋友關係。如果m[i][j] = 1,表示已知第 i 個和 j 個學生互為朋友關係,否則為不知道。你必須輸出所有學生中的已知的朋友圈總數。
示例 1:
輸入:
[[1,1,0],
[1,1,0],
[0,0,1]]
輸出: 2
說明:已知學生0和學生1互為朋友,他們在乙個朋友圈。
第2個學生自己在乙個朋友圈。所以返回2。
示例 2:
輸入:
[[1,1,0],
[1,1,1],
[0,1,1]]
輸出: 1
說明:已知學生0和學生1互為朋友,學生1和學生2互為朋友,所以學生0和學生2也是朋友,所以他們三個在乙個朋友圈,返回1。
注意:n 在[1,200]的範圍內。
對於所有學生,有m[i][i] = 1。
如果有m[i][j] = 1,則有m[j][i] = 1。
簡單的並查集問題
#define max_student 200
// 記錄節點的祖父節點
int g_father[max_student];
// 並查集
// 返回祖父節點
int unionsearch(int id)
son = id;
while (g_father[id] != id)
// 壓縮演算法
// 把這條鏈上的節點的祖父節點都設定為id
// 使層級變成兩層
while (son != g_father[id])
return id;
}int findcirclenum(int** m, int msize, int* mcolsize)
for (i = 0; i < msize; i++) }}
}return friendcirclenum;
}
位元組專題 leetcode 547 朋友圈
547.朋友圈 班上有 n 名學生。其中有些人是朋友,有些則不是。他們的友誼具有是傳遞性。如果已知 a 是 b 的朋友,b 是 c 的朋友,那麼我們可以認為 a 也是 c 的朋友。所謂的朋友圈,是指所有朋友的集合。給定乙個 n n 的矩陣 m,表示班級中學生之間的朋友關係。如果m i j 1,表示已...
並查集應用 leetcode547朋友圈
班上有 n 名學生。其中有些人是朋友,有些則不是。他們的友誼具有是傳遞性。如果已知 a 是 b 的朋友,b 是 c 的朋友,那麼我們可以認為 a 也是 c 的朋友。所謂的朋友圈,是指所有朋友的集合。給定乙個 n n 的矩陣 m,表示班級中學生之間的朋友關係。如果m i j 1,表示已知第 i 個和 ...
Leetcode C 隨手刷 547 朋友圈
班上有 n 名學生。其中有些人是朋友,有些則不是。他們的友誼具有是傳遞性。如果已知 a 是 b 的朋友,b 是 c 的朋友,那麼我們可以認為 a 也是 c 的朋友。所謂的朋友圈,是指所有朋友的集合。給定乙個 n n 的矩陣 m,表示班級中學生之間的朋友關係。如果m i j 1,表示已知第 i 個和 ...