Dijkstra和floyd——求单源点最短路径
2013-10-11 10:14
776 查看
虽然是跟着学的,但实在米有改动。。。因为这两个算法的确就这样写的啦~~~
所以直接把代码跟着敲一敲运行一遍放上来~~~
所以直接把代码跟着敲一敲运行一遍放上来~~~
package com.java.struture; import java.util.Scanner; public class MinPath { private static int INF = 999999; private int[][]map; private int n; private int []dist; private boolean []visited; public MinPath(int n, int [][]map){ this.n = n; this.map = map; this.dist = new int[n+1]; } private void floyd(){ for(int k = 1; k <= n;k++){//k为中间点 for(int i = 1; i<=n; i++){ for(int j = 1; j<=n;j++){ if(map[i][k]+map[k][j] < map[i][j]) map[i][j] = map[i][k]+map[k][j]; } } } System.out.println(map[1] ); } private void dijk(){ int x=0,MIN = 0; visited = new boolean[n+1]; //初始化距离为INF最大值 for(int i = 1; i<=n ;i++){ dist[i] = INF; } dist[1] = 0;//1为最开始的点 for(int i = 1; i<=n ;i++){ MIN = INF; for(int j = 1; j<=n ;j++){ if(!visited[j] && dist[j]<MIN){ MIN = dist[j];//找到比当前距离小的就替换MIN x = j;//记录最小点的下标,从这点出发开始往下搜 } } if(MIN == INF)break;//没有改变 visited[x]=true; //对于从x出发的所有边(x,j),更新距离d[j] for(int j = 1 ; j<= n; j++){ if(!visited[j] && dist[j] > dist[x]+map[x][j]) dist[j] = dist[x] + map[x][j]; } } System.out.println(dist ); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt();//顶点数 int m = sc.nextInt();//边数 if(n==0 && m==0)break; int[][]map = new int[n+1][n+1]; for(int i = 1; i <= n;i++){ for(int j = 1; j <=n ;j++){ if(i==j) map[i][j] = 0; else map[i][j] = map[j][i] = INF; } } int vi, vj , cost; while(m-- > 0){ vi = sc.nextInt(); vj = sc.nextInt(); cost = sc.nextInt(); if(cost < map[vi][vj]) map[vi][vj] = map[vj][vi] = cost; } MinPath mp = new MinPath(n,map); //mp.dijk(); mp.floyd(); } } }
相关文章推荐
- 图论算法(二)-最短路径的Dijkstra [ 单源 ] 和Floyd[ 多源 ] 解法(JAVA )
- 最短路径 (单源最短路径Dijkstra和任意两点最短路径Floyd) C实现
- Dijkstra单源最短路径实现 及 Floyd任意两点之间的最短路径
- 数据结构 学习笔记(八):图(中):最短路径问题(单源最短路径 Dijkstra,多源最短路径 Floyd)
- 【模板】 Dijkstra单源最短路径 (模板题:XJOI P1061)
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- POJ 2387Til the Cows Come Home(最短单源路径)(dijkstra)
- 数据结构(十五)dijkstra单源最短路径
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- Dijkstra算法求单源最短路径
- Dijkstra模板求单源点最短路径
- POJ 1125 Stockbroker Grapevine (Dijkstra求所有点的单源最短路径)
- 最小生成树算法(Prime、Kruskal)和最短路径算法(Dijkstra、Floyd)
- 第七章 图(最短路径算法:dijkstra,bellman-ford,floyd)
- 最短路径(Dijkstra和Floyd)
- Dijkstra单源最短路径
- Dijkstra求单源最短路径(图,数据结构)
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- 单源最短路径(Dijkstra)算法