1.顶点状态
import java. util. Arrays;
public class visitVertex {
static int Max = Integer. MAX_VALUE;
public int [ ] isNo_Visited;
public int [ ] pre_vertex;
public int [ ] dis;
public visitVertex ( ) {
}
public visitVertex ( int vertex_Num, int start_vertex) {
this . isNo_Visited = new int [ vertex_Num] ;
this . pre_vertex = new int [ vertex_Num] ;
this . dis = new int [ vertex_Num] ;
Arrays. fill ( dis, Max) ;
this . isNo_Visited[ start_vertex] = 1 ;
this . dis[ start_vertex] = 0 ;
}
public boolean isNoVisited ( int index) {
return isNo_Visited[ index] == 1 ;
}
public void updateDistance ( int index, int distance) {
dis[ index] = distance;
}
public int updatePreVertex ( int v1, int v2) {
return pre_vertex[ v1] = v2;
}
public int startVertex_targetVertex ( int index) {
return dis[ index] ;
}
public int newVisit_Vertex ( ) {
int index = 0 ;
for ( int i = 0 ; i < isNo_Visited. length; i++ ) {
if ( ! isNoVisited ( i) && startVertex_targetVertex ( i) < Max) {
Max = startVertex_targetVertex ( i) ;
index = i;
}
}
isNo_Visited[ index] = 1 ;
return index;
}
public void showArr ( ) {
for ( int i : isNo_Visited) {
System. out. print ( i + "\t" ) ;
}
System. out. println ( ) ;
System. out. println ( "-------------------------" ) ;
for ( int j : pre_vertex) {
System. out. print ( j + "\t" ) ;
}
System. out. println ( ) ;
System. out. println ( "---------------------------" ) ;
for ( int k : dis) {
System. out. print ( k + "\t" ) ;
}
}
public void show ( ) {
showArr ( ) ;
}
}
2.Dijsktra
import java. util. Arrays;
public class Graph {
private char [ ] vertex;
private int [ ] [ ] Link_Array;
private visitVertex v;
public Graph ( ) {
}
public Graph ( char [ ] vertex, int [ ] [ ] link_Array) {
this . vertex = vertex;
this . Link_Array = link_Array;
}
public void showGraph ( ) {
for ( int i = 0 ; i < vertex. length; i++ ) {
for ( int j = 0 ; j < vertex. length; j++ ) {
System. out. printf ( "%12d" , Link_Array[ i] [ j] ) ;
}
System. out. println ( ) ;
}
}
public void show ( ) {
v. showArr ( ) ;
}
public void Dijkstra ( int index) {
v = new visitVertex ( vertex. length, index) ;
updateDistance ( index) ;
for ( int i = 1 ; i < vertex. length; i++ ) {
index = v. newVisit_Vertex ( ) ;
updateDistance ( index) ;
}
}
public void updateDistance ( int index) {
int len = 0 ;
for ( int target = 0 ; target < Link_Array[ index] . length; target++ ) {
len = v. startVertex_targetVertex ( index) + Link_Array[ index] [ target] ;
if ( ! v. isNoVisited ( target) && len < v. startVertex_targetVertex ( target) ) {
v. updatePreVertex ( target, index) ;
v. updateDistance ( target, len) ;
}
}
}
}
3.入口
public class Input {
static int Max = Integer. MAX_VALUE;
public static void main ( String[ ] args) {
char [ ] vertex = { 'A' , 'B' , 'C' , 'D' } ;
int [ ] [ ] Link_Array = {
{ Max, 100 , 20 , Max} ,
{ 100 , Max, 70 , 60 } ,
{ 20 , 70 , Max, 50 } ,
{ Max, 60 , 50 , Max}
} ;
Graph graph = new Graph ( vertex, Link_Array) ;
graph. showGraph ( ) ;
graph. Dijkstra ( 1 ) ;
graph. show ( ) ;
}
}