资源简介
(Java)求两顶点间最短路径和距离
在网上查看了一些博客,发现他们的代码都有些问题,于是自己重新写了一个,有一定注释

代码片段和文件信息
import java.util.HashMap;
import java.util.linkedList;
import java.util.Queue;
public class GraphByMatrix {
private int[] vertexesArray;//顶点
Double[][] edgesMatrix;//存储路径时间
private boolean[] visited;//是否访问过
private int vertexSize = 0;
public boolean isDirected = false;//是否有向
public int maxSize = 0;
public static final Double MAX_VALUE = Double.MAX_VALUE;//如果没有直接连通就初始化为MAX_VALUE
public Double[] dist;//存储时间
public HashMap vertexQueue;//存储路径
public GraphByMatrix(int size){
init(size);
}
private void init(int size){//初始化
maxSize = size;
vertexesArray = new int[maxSize];
visited = new boolean[maxSize];
edgesMatrix = new Double[maxSize][maxSize];
for (int row = 0; row < maxSize; row++) {
for (int column = 0; column < maxSize; column++) {
if(row==column){
edgesMatrix[row][column] = 0.0;
}
else{
edgesMatrix[row][column] = MAX_VALUE;
}
}
}
}
public void addvertex(int n){//添加顶点
vertexesArray[vertexSize] = n;
vertexSize++;
}
public void addEdge(int startint endDouble edge) throws Exception{//添加路径
int s = getVertexIndex(start);
int e = getVertexIndex(end);
if(isDirected){
edgesMatrix[s][e] = edge;
}
else{
edgesMatrix[s][e] = edge;
edgesMatrix[e][s] = edge;
}
}
public void changeType(boolean isDirected){//改变类型,默认为无向图,基本可以不管
this.isDirected = isDirected;
}
public void Dijkstra(int startint end) throws Exception{//获取最短路径和时间
int s = getVertexIndex(start);
int e = getVertexIndex(end);
vertexQueue = new HashMap();//存储路径
dist = new Double[maxSize];//存储结果
for(int i = 0;i visited[i] = false;
dist[i] = MAX_VALUE;
}
Queue queue = new linkedList();
queue.add(s);
vertexQueue.put(s queue);
dist[s] = 0.0;
visited[s] = true;
int temp =s;
Iterator(tempe);
queue = vertexQueue.get(e);
System.out.print(“路径为:“);
while(!queue.isEmpty()){
System.out.print(vertexesArray[queue.remove()]);
}
System.out.println(“时间为:“+dist[e]);
}
public void Iterator(int tempint e){//宽度遍历
Queue queue = new linkedList();
Queue qVertex = new linkedList();
for(int i=0;i //System.out.print(“1“);
if(edgesMatrix[temp][i] != MAX_VALUE&&dist[temp]+edgesMatrix[temp][i] dist[i] = dist[temp]+edgesMatrix[temp][i];
queue = new linkedList(vertexQueue.get(temp));
queue.add(i);
qVertex.add(i);
if(vertexQueue.containsKey(i)){
vertexQueue.replace(i queue);
}
else{
vertexQueue.put(i queue);
}
}
}
while(!qVertex.isEmpty()){
temp = qVertex.remove();
Iterator(tempe);
}
visited[temp] = true;
}
//获取顶点值在数组里对应的索引
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-06-17 12:08 Dijkstra\
文件 301 2017-06-17 12:08 Dijkstra\.classpath
文件 384 2017-06-17 12:08 Dijkstra\.project
目录 0 2017-06-17 12:08 Dijkstra\.settings\
文件 598 2017-06-17 12:08 Dijkstra\.settings\org.eclipse.jdt.core.prefs
目录 0 2017-06-17 13:53 Dijkstra\bin\
文件 4073 2017-06-17 16:16 Dijkstra\bin\GraphByMatrix.class
文件 1408 2017-06-17 16:12 Dijkstra\bin\Main.class
目录 0 2017-06-17 13:53 Dijkstra\src\
文件 3514 2017-06-17 16:16 Dijkstra\src\GraphByMatrix.java
文件 908 2017-06-17 16:12 Dijkstra\src\Main.java
相关资源
- 微博系统(Java源码,servlet+jsp),适
- java串口通信全套完整代码-导入eclip
- jsonarray所必需的6个jar包.rar
- 三角网构TIN生成算法,Java语言实现
- java代码编写将excel数据导入到mysql数据
- Java写的cmm词法分析器源代码及javacc学
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
- java期末考试试题两套(答案) 选择(
- JAVA3D编程示例(建模、交互)
- Java 文件加密传输
- java做的房产管理系统
- 基于jsp的bbs论坛 非常详细
评论
共有 条评论