第五周作业——Dijkstra算法的实现
来源:互联网 发布:电话变声软件 编辑:程序博客网 时间:2024/06/06 04:50
package progrem;import java.io.BufferedReader;import java.io.FileReader;public class Dijkstra {public static int Max = 1000;public float cost[][];//邻接矩阵public int vertexNum;//定点数public int weight;//权重public static void main(String []args){Dijkstra dj = new Dijkstra();dj.InitEdge();dj.dijkstra(0);}public void InitEdge(){//初始化try{String readStr = null;String storeStr[];int firstAdj;//起始顶点int endAdj;//终点float weight;FileReader fr = new FileReader("C:/Users/Y470/Desktop/tinyEWD.txt");BufferedReader br = new BufferedReader(fr);storeStr = new String[3];readStr = br.readLine().trim();storeStr = readStr.split(" ");vertexNum = Integer.parseInt(storeStr[0]);//初始化顶点数cost = new float[vertexNum][vertexNum];for(int x=0;x<vertexNum;x++){//初始化邻接矩阵for(int y=0;y<vertexNum;y++){cost[x][y] = Max;}}readStr = br.readLine().trim();while(readStr != null){storeStr = readStr.split(" ");firstAdj = Integer.parseInt(storeStr[0]);endAdj = Integer.parseInt(storeStr[1]);weight = Float.parseFloat(storeStr[2]);cost[firstAdj][endAdj] = weight;//按读取到的值依次给邻接矩阵赋值readStr = br.readLine();}br.close();}catch(Exception e){e.printStackTrace();}}public void dijkstra(int v){float []dist = new float[vertexNum];//存放到原点的最小距离int []s = new int[vertexNum];//源点集合即 s 集合int []rear = new int[vertexNum];int [][]q = new int[vertexNum][vertexNum];//到 i 顶点 的最短距离路径存放在队列去[i],队头指针为0,对为指针为存储在rear[]中。int i,j,k,m;float win;for(i=1;i<vertexNum;i++){//初始化s和rears[i] = 0;rear[i] = -1;}for(i=1;i<vertexNum;i++){dist[i] = cost[v][i];if(dist[i]<Max){q[i][++rear[i]] = v;q[i][++rear[i]] = i;}}s[v] = 1; //v顶点进入集合for(k=0;k<vertexNum-1;k++){//并入n-1个顶点即是求n-1条最短路径win = Max;j = v;for(i=1;i<vertexNum;i++){if(s[i] ==0 && dist[i]<win){j = i;win = dist[i];}}if(j!=i){s[j] = 1;System.out.print("源点"+v+"到顶点顶点"+j+"的最短距离是:"+dist[j]+" 经过的定点有:");for(i=0;i<=rear[j];i++){System.out.print(q[j][i]+" ");}System.out.println();for(i=1;i<vertexNum;i++){if(s[i] ==0 && ((dist[j]+cost[j][i])<dist[i])){//修改从原点经过j到i 比原来的短时要修改dist[i] = dist[j] + cost[j][i];for(m=0;m<=rear[j];m++){q[i][m] = q[j][m];}rear[i] = rear[j];q[i][++rear[i]] = i;}}}}}}
0 0
- 第五周作业——Dijkstra算法的实现
- 第五周作业——3.Dijkstra算法的实现
- 第五周作业——Dijkstra算法的实现
- 第五周作业——Dijkstra算法的实现
- 算法概论 第五周作业
- 算法概论第五周作业
- 算法第五周作业01
- Dijkstra算法的实现
- Dijkstra算法的实现
- dijkstra算法的实现。
- Dijkstra算法的实现
- 第五周作业——有向图强连通分量的编程实现
- 第五周作业——有向图强连通分量的编程实现
- 第五周的作业
- 训练第五周之Dijkstra算法
- 【作业存档】Dijkstra算法的练习
- 第二周作业——RSA算法的实现
- Dijkstra算法——C#实现版
- 黑马程序员6--HTML
- nyoj219
- ntp esxi
- js:深入函数的定义
- FZU2171:防守阵地 II(线段树)
- 第五周作业——Dijkstra算法的实现
- POP3、SMTP和IMAP
- 黑马程序员7--单例设计模式
- Cocos2d-x v3.0正式版尝鲜体验【3】 Label文本标签
- 黑马程序员8--网络编程
- C/C++ 宏
- 逗B少年搞程序04 策略模式——这次要甩什么技能呢~
- 基于LRU算法的缓存池——阿里笔试题
- 玩转html5(一)-----盘点html5新增的那些酷酷的input类型和属性