import java.util.*;
public class Youxiangtu {
public static void main(String args[]) {
Scanner in=new Scanner(System.in);
while(in.hasNext()) {
int V=in.nextInt();
int E=in.nextInt();
YouxiangG g=new YouxiangG(V,E);
for(int i=1;i<=V;i++) {
g.Add(in.nextInt(), in.nextInt(), in.nextInt());
}
System.out.println(g.Dijiesita());
}
}
}
class YouxiangG{
public int V;
public int E;
public Map<String,Integer> map=new HashMap<String,Integer>();
YouxiangG(int v,int e){
this.V=v;
this.E=e;
}
//插入E
public void Add(int start,int end,int value) {
String str=new String(start+" "+end);
if(map.containsKey(str)) {
int tempvalue=map.get(str);
map.put(str, Math.min(value,tempvalue));
}else {
map.put(str, value);
}
}
//查询函数
public int Find(int start,int end) {
String str=new String(start+" "+end);
if(map.containsKey(str))
return map.get(str);
return Integer.MAX_VALUE;
}
//求单源最短路径
public int Dijiesita() {
int dist[]=new int[V+1];
int visit[]=new int[V+1];
for(int i=2;i<=V;i++) {
dist[i]=Find(1,i);
}
for(int i=2;i<=V;i++) {
int mind=Integer.MAX_VALUE;
int pos=-1;
for(int j=2;j<=V;j++) {
if(visit[j]==0 && mind>dist[j]) {
mind=dist[j];
pos=j;
}
}
visit[pos]=1;
for(int k=2;k<=V;k++) {
if(mind==Integer.MAX_VALUE) {
break;
}else {
int tfind=Find(pos,k);
if(tfind==Integer.MAX_VALUE) {
continue;
}else {
if(tfind+mind<dist[k]) {
dist[k]=tfind+mind;
}
}
}
}
}
return dist[V];
}
public void Print() {
for(String str:map.keySet()) {
System.out.println(str+" "+map.get(str));
}
}
}
稀疏有向图求最短路径
最新推荐文章于 2022-12-29 08:30:00 发布