Bellman-Ford(Java)
package com;
import java.util.Scanner;
public class Bellman_Ford {
private static E edge[];
private static int nodenum,edgenum,source;//节点数、边数、原点
private static int dist[];//节点到源点最小距离
public static void init(){
Scanner in = new Scanner(System.in);
nodenum= in.nextInt();
edgenum = in.nextInt();
source = in.nextInt();
dist = new int[nodenum+1];
edge = new E[edgenum+1];
for(int i=0;i<edge.length;i++){
edge[i] =new E();
}
dist[source] = 0;
for(int i=1;i<=edgenum;i++){
edge[i].start=in.nextInt();
edge[i].end = in.nextInt();
edge[i].weight = in.nextInt();
if(edge[i].start==source){
dist[edge[i].end] = edge[i].weight;
}
}
}
//松弛
public static void relax(int start,int end,int weight){
if(dist[end]>dist[start]+weight){
dist[end] = dist[start]+weight;
}
}
public static boolean bellmanFord(){
for(int i=1;i<=nodenum-1;i++){
for(int j=1;j<=edgenum;j++){
relax(edge[j].start,edge[j].end,edge[j].weight);
}
}
boolean flag =true;
//判断是否有负权环路
for(int i=1;i<=edgenum;i++){
if(dist[edge[i].end]>dist[edge[i].start]+edge[i].weight){
flag = false;
break;
}
}
return flag;
}
public static void main(String[] args) {
init();
if(bellmanFord()){
for(int i=1;i<=nodenum;i++){
System.out.print(dist[i]+" ");
}
}
}
}
//边
class E{
int start;
int end;
int weight;
}
Dijkstra(O(V^2))
package com;
import java.util.Scanner;
public class DijkstraSP {
public static int maxnum = 100;
public static int maxint = 99999;
static int dist[] = new int[maxnum];
static int prev[] = new int[maxnum];
static int c[][] = new int[maxnum][maxnum];
static int n;
static int line;
pub