请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

数据结构篇——并查集

[复制链接]
查看: 23|回复: 0

1万

主题

2万

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
46383
发表于 2019-11-9 10:07 | 显示全部楼层 |阅读模式
底子概念

并查集是一种保护聚集的数据结构,“并”,“查”,“集” 三个字别离取自 Union(合并),Find(查找),Set(聚集)。并查集是几多个不订交聚集,可以大要在 \(O(1)\) 实现两个聚集的合并,判定两个元素能否属于同一聚集利用,如其求无向图的连通份量个数、实现kruskal算法求最小天生树。
并查集的实现方式就是一个数组:
  1. int pre[N];
复制代码
其中 pre 表现元素 i 结点的父节点,pre 和 i 结点属于同一聚集。例如:pre[1] = 2 就表白元素1的父节点是元素2,元素1和元素2属于同一聚集。假如 pre==i 则分析元素 i 是该聚集的根结点,对于同一个聚集来说,只存在一个根结点。
实现

预备工作

初始化一个pre数组。用于记载了每个节点属于哪个聚集;初始时数组内的值与数组的下角标齐截。即每个数字都自己一个聚集。
数据结构篇——并查集  游戏 1470173-20191108215841611-641490886

[code]void initialize(int n) {    for (int i = 1; i > m;    while (m--) {        int c1, c2;        cin >> c1 >> c2;        Union(c1, c2);//两点之间有路的属于同一个连通块,合并起来    }    int cnt = 0;    for (int i = 0; i < n; i++) {        if (pre == i) cnt++; //有几多个根结点,就有几多个连通块    }    cout = 0 && toy < n)) {            book[tox][toy] = true;            dfs(tox, toy);        }    }    return;}int main() {    cin >> m >> n;    for (int i = 0; i < m; i++) {        for (int j = 0; j < n; j++) {            cin >> maze[j];        }    }    for (int i = 0; i < m; i++) {        for (int j = 0; j < n; j++) {            if (maze[j] && !book[j]) {                dfs(i, j);                cnt++;            }        }    }    cout = 0 && tox < m && toy >= 0 && toy < n)) {                book[tox][toy] = true;                q.push(node(tox, toy));            }        }    }}int main(int argc, char** argv) {    cin >> m >> n;    for (int i = 0; i < m; i++) {        for (int j = 0; j < n; j++) {            cin >> maze[j];        }    }    int ans = 0;    for (int i = 0; i < m; i++) {        for (int j = 0; j < n; j++) {            if (maze[j] && !book[j] ) {                bfs(i, j);                ans++;            }        }    }    cout

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 妈妈网-中国妈妈第一,是怀孕、育儿、健康等知识交流传播首选平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表