importjava.util.LinkedList;public classGraph {private int vertexSize;//顶点的数量

private int[] vertexs;//顶点数组

private int[][] matrix;//矩阵

private boolean[] isVisited;//是否访问过

private static final int MAX_WEIGHT = 1000;public Graph(intvertexSize){this.vertexSize =vertexSize;

matrix= new int[vertexSize][vertexSize];

vertexs= new int[vertexSize];for(int i = 0;i < vertexSize;i++){

vertexs[i]=i;

}

isVisited= new boolean[vertexSize];

}public intgetVertexSize() {returnvertexSize;

}public void setVertexSize(intvertexSize) {this.vertexSize =vertexSize;

}public int[] getVertexs() {returnvertexs;

}public void setVertexs(int[] vertexs) {this.vertexs =vertexs;

}public int[][] getMatrix() {returnmatrix;

}public void setMatrix(int[][] matrix) {this.matrix =matrix;

}//获取某个顶点的出度

public int getOutDegree(intindex){int[] arr =matrix[index];int degree = 0;for(int i = 0;i < arr.length;i++){if(arr[i] !=0 && arr[i]

degree++;

}

}returndegree;

}//获取两个顶点之间的权值

public int getWeight(int v1,intv2){return matrix[v1][v2] == 0 ? 0 : (matrix[v1][v2] == MAX_WEIGHT ? -1: matrix[v1][v2]);

}//深度优先遍历

private void depthFirstSearch(inti){

isVisited[i]= true;int w =getFirstNeighor(i);while(w != -1){if (!isVisited[w]){//需要遍历该顶点

System.out.println("访问到了 " + w + "顶点");

depthFirstSearch(w);

}

w= getNextNeighor(i,w);//第一个相对于w的邻接点

}

}//对外提供深度优先遍历

public voiddepthFirstSearch(){

isVisited= new boolean[vertexSize];for(int i = 0;i < vertexSize;i++){if(!isVisited[i]){

System.out.println("访问到了 " + i + "顶点");

depthFirstSearch(i);

}

}

isVisited= new boolean[vertexSize];

}//广度优先遍历(使用到了队列)

public voidbroadFirstSearch(){

isVisited= new boolean[vertexSize];for(int i = 0;i < vertexSize;i++){if(!isVisited[i]){

broadFirstSearch(i);

}

}

isVisited= new boolean[vertexSize];

}private void broadFirstSearch(inti){int u;//获取队列的头结点

int w;//获取第一个邻接点

LinkedList queue = new LinkedList<>();

System.out.println("访问到了 " + i + "结点");

isVisited[i]= true;

queue.add(i);while(!queue.isEmpty()){

u=(Integer)(queue.removeFirst()).intValue();

w=getFirstNeighor(u);while(w != -1){if(!isVisited[w]) {

System.out.println("访问到了 " + w + "结点");

isVisited[w]= true;

queue.add(w);

}

w=getNextNeighor(u,w);

}

}

}//获取某个结点的第一个邻接点

public int getFirstNeighor(intindex){for(int i = 0;i < vertexSize;i++){if(matrix[index][i] > 0 && matrix[index][i]

}

}return -1;

}//根据前一个邻接点的下标来获取下一个邻接点(就是根据相对于第一个邻接点获取下一个邻接点)

/** @param v1表示要找的顶点

* @param v2表示该顶点相对于哪个邻接点去获取下一个邻接点

* **/

public int getNextNeighor(int v1,intv2){for(int i = v2 + 1;i < vertexSize;i++){if(matrix[v1][i] > 0 && matrix[v1][i]

}

}return -1;

}//普里母算法

public voidprim(){int[] lowcost = new int[vertexSize]; //最小代价顶点权值的数组,为0表示已经获取到了最小的权值

int[] adjvex = new int[vertexSize]; //放顶点权值

int min = 0;//最小值

int minId = 0;//最小的下标

int sum = 0; //总和

for(int i = 1;i < vertexSize;i++){

lowcost[i]= matrix[0][i];

}for(int i = 1;i < vertexSize;i++){

min=MAX_WEIGHT;

minId= 0;for(int j = 1;j < vertexSize;j++){if(lowcost[j] < min && lowcost[j] > 0){

min=lowcost[j];

minId=j;

}

}//for(int a = 0;a < vertexSize;a++){//System.out.print(adjvex[a] + " ");//}

System.out.println("顶点为:" + adjvex[minId] + ",权值为:" + min + "最小值的下标为:" +minId);

sum+=min;

lowcost[minId]= 0;for(int j = 1;j < vertexSize;j++){if(lowcost[j] != 0 && matrix[minId][j]

lowcost[j]=matrix[minId][j];

adjvex[j]=minId;

}

}

}

System.out.println("最小生成树的权值和为:" +sum);

}public static voidmain(String[] args){

Graph graph= new Graph(9);int[] a1 = new int[]{0,10,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,11,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT};int[] a2 = new int[]{10,0,18,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,16,MAX_WEIGHT,12};int[] a3 = new int[]{MAX_WEIGHT,MAX_WEIGHT,0,22,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,8};int[] a4 = new int[]{MAX_WEIGHT,MAX_WEIGHT,22,0,20,MAX_WEIGHT,24,16,21};int[] a5 = new int[]{MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,20,0,26,MAX_WEIGHT,7,MAX_WEIGHT};int[] a6 = new int[]{11,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,26,0,17,MAX_WEIGHT,MAX_WEIGHT};int[] a7 = new int[]{MAX_WEIGHT,16,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,17,0,19,MAX_WEIGHT};int[] a8 = new int[]{MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,16,7,MAX_WEIGHT,19,0,MAX_WEIGHT};int[] a9 = new int[]{MAX_WEIGHT,12,8,21,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,0};

graph.matrix[0] =a1;

graph.matrix[1] =a2;

graph.matrix[2] =a3;

graph.matrix[3] =a4;

graph.matrix[4] =a5;

graph.matrix[5] =a6;

graph.matrix[6] =a7;

graph.matrix[7] =a8;

graph.matrix[8] =a9;//System.out.println("出度为:" + graph.getOutDegree(4));//System.out.println("权值:" + graph.getWeight(0,4));

}

}

转动风车java_java实现-图的相关操作相关推荐

  1. educoder中Spark GraphX—构建图及相关操作

    第1关:GraphX-构建图及相关基本操作 import org.apache.log4j.{Level, Logger} import org.apache.spark.graphx._ impor ...

  2. CAD中 OLE不能旋转_CAD入门学习技巧:图块的各种相关操作和概念汇总(下)

    上篇文章中我们介绍了CAD软件中关于图块的相关操作和概念,本文我们将继续接介绍图块相关知识,让刚开始进行CAD入门学习的小伙伴对CAD图块有更全面的了解,这样在使用CAD软件绘图的时候也能更加得心应手 ...

  3. 【Graph】NetworkX官方基础教程:图的生成与相关操作

    NetworkX官方基础教程:图的生成与相关操作 1. Graph生成和graph操作 2. 分析图 3. 画图 参考资料 本文作为对图结构和复杂网络的快速上手,内容包括基于NetworkX进行图的生 ...

  4. 百度脑图相关操作及快捷键

    百度脑图 百度脑图相关操作 点击百度脑图图标可进行相关操作,如另存为,分享功能 快捷键 百度脑图是一个很Nice的工具

  5. java导入包大全_eclipse快速导入jar包的相关操作步骤

    eclipse怎样快速导入jar包呢?熟悉这款软件是非常简单的,今天小编就分享了关于eclipse快速导入jar包,有需要的朋友一起来看看吧! eclipse快速导入jar包的相关操作步骤 方法1·最 ...

  6. [RabbitMQ]RabbitMQ原理与相关操作(一)

    2019独角兽企业重金招聘Python工程师标准>>> RabbitMQ原理与相关操作(一) 小编是菜鸟一枚,最近想试试MQ相关的技术,所以自己看了下RabbitMQ官网,试着写下自 ...

  7. GIt本地相关操作(一)

    最近项目中开始使用git,之前都是用svn来对项目代码进行版本控制.因此git对笔者来说比较陌生,故此通过记录学习git详细过程,与大家进行分享.由于是第一次写,git也是初学,其中难免出现自己理解的 ...

  8. 算法基础:图的相关算法知识笔记

    一.图的相关算法 1.图的分类知识 如下图: 2.生成树概念 对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树. 连通图的生成树具有这样的特征:边的数量 = 顶点数 - ...

  9. 【Pytorch神经网络理论篇】 26 基于空间域的图卷积GCNs(ConvGNNs):定点域+谱域+图卷积的操作步骤

    图卷积网络(Graph Convolutional Network,GCN)是一种能对图数据进行深度学习的方法.图卷积中的"图"是指数学(图论)中用顶点和边建立的有相关联系的拓扑图 ...

最新文章

  1. 春节囤货清单 | 15篇近期值得读的AI论文
  2. python菜鸟教程n-Python 元组
  3. python实验过程心得体会_20192416 实验四《Python程序设计》综合实践报告
  4. 天翼云从业认证(1.5)了解Windows和Linux两种操作系统的常见命令和操作
  5. mysql数据库事件不执行_如何查看mysql事件是否执行
  6. 国家标准GB7665-87传感器
  7. AntD 可编辑行表格
  8. linux之setsid命令
  9. 实现链表的增删改查java代码_用Java语言实现链表的增删改查
  10. java|jsp类成品展示_jsp学生诚信素质评价系统
  11. 背包九讲Java版本
  12. 【计算技巧】分数复数的共轭--分数复数模的平方计算技巧
  13. 排队服务系统仿真研究计算机模拟,基于蒙特卡洛方法排队系统性能的仿真优化研究...
  14. 2021-2022学年广州市白云区八年级第一学期期中统考英语试题
  15. 贝叶斯估计(python 版)
  16. k8s实践1:kubectl config 命令
  17. 谷雪梅 Google中国
  18. 人脸识别系统中的活体检测技术有哪些分类
  19. QQ群里收集的外企iOS开发的笔试题
  20. 易飞ERP 算号服务 注册服务 服务器迁移 实施 二开 全版本

热门文章

  1. java class api 中文乱码_SpringMVC之springmvc原始api,请求中文乱码问题
  2. 电脑机器人_视频|电话积分换平板电脑和扫地机器人?女子拿回家后……-
  3. mysql用户名锁定_MySQL用户锁定
  4. Dell笔记本双系统安装(Ubuntu 16.04)
  5. 什么是pdh光端机?pdh光端机产品优点介绍!
  6. 【渝粤教育】电大中专职业健康与安全 (3)作业 题库
  7. 在mysql中删除表中字段_MySQL中的表中增加删除字段
  8. C++一天一个程序(一)
  9. mysql sql wait 写法_有关SQL语句写法注意的那些事情(原创整理)
  10. 欧几里德算法求最大公约数