一.问题

1.问题描述:

有n个点(1...n),输入整数对(8,9),表示8,9点之间存在相互的连接关系。

动态连通性问题--编写一段程序过滤掉所以无意义的整数对,即为在不破坏图连通性的前提下,以最简单的方式表示图的连通性。2.实现方案:设计数据结构保存已经存在的整数对,并且用他们来判断新数对是否满足新相连关系。

3.实例应用:网络连接问题,电子触电设计,社交网络关系等等

二.解决

1.定义问题--设计api

public class UF//(类名大写)

(构造方法)

UN(int N)

初始化0-N个触点

void

union(int p,int q)

在两点之间建立连接

int

find(int p)

在触点集中找到p

boolean

connected(int p,int q)

判断触点p,q是否相连

int

count()

连通分量的计数

2.方案设计

两个变量

count--用于连通分量的计数&&id[]--数组下标表示连通分量

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

初始化时下标默认为自身下标

在输入连通关系后(3,4),(5,6)

0

1

2

3

4

5

6

7

8

9

0

1

2

4

4

6

6

7

8

9

将所以id[3]相同的下标修改为id[4]

从而表示数组的相连关系

1.quick-find

public int find(int p){

return id[p];

}

//对两点进行连接

public void union(int p,int q){

int pid=find(p);

int qid=find(q);

if(pid==qid)return;//直接return用于方法的推出

for(int i=0;i

if(id[i]==pid)id[i]=qid;

count--;

}

每次union需要访问数组(N+3)到(2N+1)次

2.quick-union

private int find(int p){

while(p!=id[p]){//找出根结点

p=id[p];

}

return p;

}

private void union(int p,int q){

int prot=find(p);

int qrot=find(q);

if(qrot==prot)return;

id[qrot]=prot;

count--;

}

3.union-find算法,加权

public class UF {

private int[] id;

private int[] sz;

private int count;

//初始化

public UF(int N){

count=N;

id=new int[N];

sz=new int[N];

for(int i=0;i

id[i]=i;

sz[i]=1;

}

}

private int find(int p){

while(p!=id[p]){//找出根结点

p=id[p];

}

return p;

}

private void union(int p,int q){

int i=find(p);

int j=find(q);

if(i==j)return;

if(sz[i]

id[i]=j;sz[j]+=sz[i];

}else{

id[j]=i;sz[i]+=sz[j];

}

count--;

}

//对联通分量进行计数

public int count(){return count;}

//判断是否连接

public boolean connected(int p,int q){

return find(p)==find(q);

}

}

java连通图_算法练习_图的连通性问题(JAVA)相关推荐

  1. java的简单算法题_[2]十道算法题【Java实现】

    前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...

  2. java有阴历年算法吗_中国农历算法java实现

    /** * 中国农历算法 - 实用于公历 1901 年至 2100 年之间的 200 年 */ import java.text.*; import java.util.*; class Chines ...

  3. 关键路径例题图表_算法学习记录-图——应用之关键路径(Critical Path)

    之前我们介绍过,在一个工程中我们关心两个问题: (1)工程是否顺利进行 (2)整个工程最短时间. 之前我们优先关心的是顶点(AOV),同样我们也可以优先关心边(同理有AOE).(Activity On ...

  4. java实现lz77算法实例_数据压缩算法---LZ77算法 的分析与实现

    LZ77简介 Ziv和Lempel于1977年发表题为"顺序数据压缩的一个通用算法(A Universal Algorithm for Sequential Data Compression ...

  5. java的hash算法实现_一致性Hash算法的Java实现详解

    package com.baijob.commonTools; import java.util.Collection; import java.util.SortedMap; import java ...

  6. java 进制转换算法_算法笔记_033:十六进制转八进制(Java)

    packagecom.liuzhen.systemExe;importjava.util.Scanner;public classMain {//把16进制字符串转成2进制字符串 publicStri ...

  7. java入学测试_算法历练之路——入学考试(JAVA)

    入学考试 时间限制: 1Sec 内存限制: 128MB 提交: 42 解决: 18 题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界 上最伟大的医师.为此,他想拜附近最有威望的医师为师. 医师为了 ...

  8. 蓝桥杯_算法训练_矩阵乘法

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  9. 2021秋招_唯品会_算法岗_笔试_部分题目

    1.单选 1.1 第一题就是求投掷均匀正六面体骰子的熵,但很惨的是我只会算到 − ∑ p × l o g ( p ) -\sum{p \times log(p)} −∑p×log(p),不知道如何继续 ...

最新文章

  1. scala面向对象之trait
  2. 产品研究:安装程序 或 移动端APP 为什么这么占用空间?
  3. 百度蜘蛛(BaiduSpider)IP段详细情况介绍
  4. 如何在rul中添加图片
  5. nginx rewrite 实现二级域名跳转
  6. poi报表导出4.1.0版本工具类 导出并下载
  7. django+echarts+ajax异步+显示优化--基本例子
  8. 干掉 SQL 中的 like,我用 es 后运营小姐姐们都说好快!
  9. 《游戏程序设计模式》 2.2 - 游戏循环
  10. 数字体育进入黄金窗口期
  11. 下载keep运动软件_keep运动下载安装
  12. 名片管理系统java_java毕业设计_springboot框架的名片管理系统
  13. 1,0在js中有可能会等于true和false来去判断的
  14. 华为云面试指南—Rainbow
  15. SLAM十四讲-设计前端-0.4-代码解读
  16. 2020热门编程语言,总有一款适合你【云图智联】
  17. DNS劫持原理、dns劫持有什么办法解决、DNS劫持原理与操作
  18. POWER PIVOT的使用介绍2
  19. 支付宝app支付流程(微信支付同理)
  20. 英语、数学不精,还可以选择IT行业吗?

热门文章

  1. Windows10 的microsoft defender smartscreen怎么关闭的教程和方法?
  2. 车联网---V2X介绍、V2X现有的两大通信标准DSRC和LTE V2X
  3. 爬虫入门教程 | 使用selenium爬取微博热门数据
  4. 流利说 Level 5 全文
  5. 全球IT服务“十分天下有其一”,中软国际的底气来自何方?
  6. 大数据告诉你,从洛阳北大青鸟毕业的学生未来发展到底怎么样?
  7. 国内外计算机联锁系统的发展,车站计算机联锁系统的现状与发展
  8. mysql替换成对括号
  9. 39.(前端)欢迎页面的设置
  10. 微型计算机原理实验二,微机原理实验2