使用並查集解決的相關問題

2022-10-11 16:51:14 字數 797 閱讀 8378

關於並查集的說明,見如下部落格:

使用並查集處理集合的合併和查詢問題

本題的解題思路參考部落格

使用dfs和並查集方法解決島問題

主要思路

橫縱座標表示的是城市,因為城市是一樣的,所以只需要遍歷對角線上半區或者下半區即可,如果某個(i,j)位置是1,可以說明如下兩個情況

第一,i這座城市和j這座城市可以做union操作。

第二,(j,i)位置一定也是1。

遍歷完畢後,返回整個並查集中的集合數量即可。

完整**

public static int findcirclenum(int m) }}

return uf.setsize();

}public static class uf

sets = n;

}public void union(int i, int j)

int p1 = find(i);

int p2 = find(j);

if (p2 != p1) else

sets--;}}

public int find(int i)

for (int index = 0; index < hi; index++)

return i;

}public int setsize()

}

待更新...

演算法和資料結構筆記

並查集解決朋友圈問題

首先我們來看一道題筆試題,關於朋友圈的問題 解決這個問題,我們可以用並查集來解決。並查集是一種資料結構,用於處理不相交集合中的合併以及查詢問題,將n個元素分成一組不相交的集合,開始時我們把每乙個元素當成乙個集合,然後按規律將集合合併。舉例說明,首先定義乙個只有10個元素的陣列,並將每個元素的值設定為...

並查集解決朋友圈問題

題目 加入已知n個人和m對好友關係 存於陣列r 如果兩個人是直接或間接的好友 好友的好友的好友 則認為他們屬於同乙個朋友圈。請寫程式求出這n個人裡一共有多少個朋友圈。例如 n 5,m 3,r 表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1,2,3屬於同乙個朋友圈,4和5屬於另乙個朋友圈...

利用並查集解決節點互聯問題

節點連通問題一般來說有兩個思路 1 化作圖論問題,是否連通變為深度 廣度優先搜尋,連通個數為連通分量 2 構造並查集解決 兩者 複雜度差不多但並查集時間複雜度更低 注意 只適用於無向圖的情況 class unionfind void put int origin,int target while i...