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

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));

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java和golang性能_Java本质和性能

java和golang性能最初的问题是如何计算二进制数中1的个数&#xff1f; 我包含了使用Integer.bitCount&#xff08;&#xff09;的性能比较&#xff0c;该性能可以转换为固有特性&#xff0c;即单个机器代码指令POPCNT和执行相同功能的Java代码。 题 如何计算二进制数中1的个数…

开源GIS库GDAL/GEOS在Windows下的编译与 Codeblocks配置

最近在研究开源GIS库GDAL&#xff0c;我是采用自己下载源码编译的方式&#xff0c;主要进行以下几个步骤&#xff1a; 编译GEOS&#xff0c;参考自GEOS的wiki 下载GEOS源代码&#xff0c;目前的版本为3.5.0&#xff0c;解压到C盘根目录。打开VS2012自带的命令行工具 进入geo…

Java中.setvalue(-1)_Java State.setValue方法代碼示例

本文整理匯總了Java中org.eclipse.core.commands.State.setValue方法的典型用法代碼示例。如果您正苦於以下問題&#xff1a;Java State.setValue方法的具體用法&#xff1f;Java State.setValue怎麽用&#xff1f;Java State.setValue使用的例子&#xff1f;那麽恭喜您, 這裏精…

使用自定义线程池处理并行数据库流

并行数据库流 在我以前的文章中 &#xff0c;我写了关于使用并行流和Speedment并行处理数据库内容的信息。 在许多情况下&#xff0c;并行流可能比通常的顺序数据库流快得多。 线程池 Speedment是一个开源的Stream ORM Java工具包和Runtime Java工具&#xff0c;它将现有的数…

GDAL编译Windows平台下64位的方式

最近写的项目需要在64位的服务器上&#xff0c;结果32位下编译的不能用&#xff0c;只好重新编译一套64位的。在编译GDAL时&#xff0c;出现了连接错误&#xff0c;如下&#xff1a; LINK : error LNK2001: unresolved external symbol > _OCTNewCoordinateTransformation a…

CentOS7.x以上版本配置DNS失效解决办法

这2周做实验&#xff0c;centos7.x经常出现yum安装软件包的时候找不到解析地址&#xff0c;提示如下错误 正在尝试其它镜像。Error downloading packages: pam-devel-1.1.8-22.el7.x86_64: [Errno 256] No more mirrors to try. libcom_err-1.42.9-12.el7_5.x86_64: [Errno 256…

java slf4j日志级别_java - 在slf4j中设置运行时消息的日志级别 - 堆栈内存溢出

>>#1 票数&#xff1a;41 已采纳使用slf4j无法做到这slf4j 。我想&#xff0c;缺少这个功能的原因是&#xff0c;几乎不可能为slf4j构建一个Level类型&#xff0c;它可以有效地映射到Facade后面所有可能的日志记录实现中使用的Level (或等效)类型。 或者&#xff0c;设计…

使用Cloudformation集成Spring Boot和EC2

在之前的博客中&#xff0c;我们将Spring Boot应用程序与Elastic beantalk集成在一起。 该应用程序是一个基于Servlet的应用程序&#xff0c;可以响应请求。 在本教程中&#xff0c;我们将部署一个Spring Boot应用程序&#xff0c;该应用程序在ec2实例上执行一些计划的任务。 …

出现$ref的原因及解决方案

$ref的产生原因 &#xff08;1&#xff09;重复引用&#xff1a;一个集合/对象中的多个元素/属性都引用了同一个对象 &#xff08;2&#xff09;循环引用&#xff1a;集合/对象中的多个元素/属性在相互引用导致循环 针对fastjson的处理 fastjson作为一款序列化引擎&#xff0c;…

Wireshark图解教程(简介、抓包、过滤器)

Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据&#xff0c;并为用户提供关于网络和上层协议的各种信息。与很多其他网络工具一样&#xff0c;Wireshark也使用pcap network library来进行封包捕捉。可破解局域网内QQ、邮箱、msn、账号等的密码&am…

php格式书写,PHP书写格式详解(必看)

从一个例子开始。启动编辑器&#xff0c;创建一个php文件并键入如下代码&#xff1a;echo "你好&#xff01;";?>将该文件命名为 test.php 并存储于 E:html 目录下。在浏览器地址栏里访问该 php 文件&#xff1a;http://127.0.0.1/test.php&#xff0c;输出结果如…

java java se_Java SE 11:推动Java前进

java java se介绍 在我看来&#xff0c;这篇文章提出了Java语言应该如何发展成为一种首选语言。 它还提供了一些我喜欢但是有时&#xff08;可能永远不会&#xff09;成为Java的一部分的功能&#xff0c;出于某些原因&#xff0c;我将对此加以解释&#xff0c;这些功能有时我已…

用GDAL/OGR去读shapefile

一、读shapefile 1、首先&#xff0c;用Arcgis创建所要读的shp文件。打开ArcCatalog,右键NEW->Shapefile&#xff0c;名称Name:point &#xff0c;要素类型&#xff08;Feature Type&#xff09;:Point。点击Edit&#xff0c;选择投影类型。 2、打开ArcMap. 单击工具栏里的A…

【日 志】

/// <summary>/// 记录执行sql时的错误日志/// <para>cmdTxt 执行的sql</para>/// <para>inputParams 传入的Hashtable参数</para>/// </summary>private static void LogLastError(string cmdTxt, Hashtable inputParams){try{StringBuil…

php 数组移除指定健,php删除数组指定键的方法

php删除数组指定键的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后定义一个“array_remove”方法&#xff1b;最后利用“array_key_exists”、“array_search”等函数实现删除数组指定键即可。PHP删除Array数组里指定的key/*** php除数组指定的key值(直接删除k…

Intellij IDEA社区版中的SpringBoot入门

我们可以使用Intellij IDEA社区版来处理SpringBoot应用程序&#xff0c;因为我们不需要配置Tomcat&#xff0c;Wildlfy等服务器&#xff0c;只需运行main&#xff08;&#xff09;方法即可运行应用程序。 但是&#xff0c;Intellij IDEA社区版中没有提供直接创建SpringBoot应用…

SpatialHadoop中空间索引系列之(四)空间格网索引实现

有关空间格网索引原理详见前面章节讲述的内容。这里我们根据SpatialHadoop中具体的实现&#xff0c;来详细讲解下。格网索引是一级索引&#xff0c;格网的个数取决于两个参数&#xff0c;一个是数据集的大小&#xff0c;另外一个就是格网的大小。那么在SpatialHadoop当中&#…

php导入csv文件,php实现CSV文件导入和导出

项目开发中&#xff0c;很多时候要将外部CSV文件导入到数据库中或者将数据导出为CSV文件&#xff0c;那么具体该如何实现呢&#xff1f;本文将使用PHP并结合mysql&#xff0c;实现了CSV格式数据的导入和导出功能。我们先准备mysql数据表&#xff0c;假设项目中有一张记录学生信…

剑指offer-二叉搜索树的后序遍历序列

/*输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。*/ /** 已知条件&#xff1a;后序序列最后一个值为root&#xff1b;二叉搜索树左子树值都比root小&#xff0c;右子树值都…

Nessus漏洞扫描教程之安装Nessus工具

Nessus基础知识 Nessus号称是世界上最流行的漏洞扫描程序&#xff0c;全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务&#xff0c;并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件&#xff0c;Nessus可同时在本机或远端上遥控&#xff0c;进行系…