https://baike.baidu.com/item/Bellman-Ford%E7%AE%97%E6%B3%95/1089090?fr=aladdin&fromid=6039406&fromtitle=bellman-ford 参考百科的c++实现版本
import java.util.*;
public class Bellman_Ford {
public static void main(String args[]){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int Vnum=in.nextInt();
int Enum=in.nextInt();
List<Edge> E=new ArrayList<Edge>();
//输入数据
for(int i=0;i<Enum;i++){
int x=in.nextInt();
int y=in.nextInt();
int value=in.nextInt();
int flag1=1;
//对边进行去重
for(int j=0;j<E.size();j++){
Edge temp1=E.get(j);
if(x==temp1.x && y==temp1.y){
if(temp1.value>value){
E.get(j).setValue(value);
flag1=0;
break;
}
}
}
if(flag1==1){
E.add(new Edge(x,y,value));
}
}
int pre[]=new int[Vnum];
int dist[]=new int[Vnum];
if(Bellman(0,pre,E,dist,Vnum)){
for(int i=1;i<Vnum;i++){
Print_path(0,i,pre);
System.out.println("="+dist[i]);
}
}
}
}
public static boolean Bellman(int start,int pre[],List<Edge> E,int dist[],int Vnum){
int MAX=Integer.MAX_VALUE;
for(int i=0;i<Vnum;i++){
dist[i]=MAX;
}
dist[start]=0;
for(int i=0;i<Vnum-1;i++){
for(int j=0;j<E.size();j++){
Edge temp2=E.get(j);
if(dist[temp2.x]!=MAX){
if(dist[temp2.x]+ temp2.value<dist[temp2.y]){
dist[temp2.y]=dist[temp2.x]+temp2.value; //更新最短路径
pre[temp2.y]=temp2.x; //保存路径前驱
}
}
}
}
//判断是否有负权回路
boolean flag2=true;
for(int i=0;i<E.size();i++){
Edge temp3=E.get(i);
if(dist[temp3.x]!=MAX){
if(dist[temp3.x]+ temp3.value<dist[temp3.y]){
flag2=false;
break;
}
}
}
return flag2;
}
//打印路径函数
public static void Print_path(int start,int end,int pre[]){
Stack<Integer> path=new Stack<Integer>();
path.push(end);
int root=end;
while(root!=pre[root]){
root=pre[root];
path.push(root);
}
int flag3=1;
while(path.size()>0){
if(flag3==1){
System.out.print(path.pop());
flag3=0;
}else{
System.out.print("->"+path.pop());
}
}
}
}
//定义数据结构
class Edge{
int x;
int y;
int value;
Edge(int x,int y,int value){
this.x=x;
this.y=y;
this.value=value;
}
public void setValue(int value){
this.value=value;
}
}
带有负权值的单源最短路径-bellman-ford算法
原文作者:Bellman - ford算法
原文地址: https://blog.csdn.net/anhuibozhoushatu/article/details/83795607
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/anhuibozhoushatu/article/details/83795607
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。