图的实现代码:
1. Graph class
public class Graph {
public ArrayList < String > vertex;
public int [ ] [ ] EdgeWeight ;
public int NumOfEdge ;
public boolean [ ] visited;
public Graph ( int n) {
vertex= new ArrayList < String > ( ) ;
EdgeWeight = new int [ n] [ n] ;
NumOfEdge = 0 ;
visited= new boolean [ n] ;
}
public void inserVertex ( String vertexs) {
vertex. add ( vertexs) ;
}
public void insertEdge ( int v1, int v2, int weight) {
EdgeWeight [ v1] [ v2] = weight;
EdgeWeight [ v2] [ v1] = weight;
NumOfEdge ++ ;
}
public String getVertexValue ( int i) {
return vertex. get ( i) ;
}
public int getNumOfVertex ( ) {
return vertex. size ( ) ;
}
public int getNumOfEdge ( ) {
return NumOfEdge ;
}
public void show ( ) {
for ( int [ ] edgeweight: EdgeWeight ) {
System . err. println ( Arrays . toString ( edgeweight) ) ;
}
}
}
2. DemoMain(主方法):
public class DemoMain {
public static void main ( String [ ] args) {
int n= 5 ;
String [ ] vertexs= { "A" , "B" , "C" , "D" , "E" } ;
Graph graph = new Graph ( n) ;
for ( String vertex : vertexs) {
graph. inserVertex ( vertex) ;
}
graph. insertEdge ( 0 , 1 , 1 ) ;
graph. insertEdge ( 0 , 2 , 1 ) ;
graph. insertEdge ( 1 , 2 , 1 ) ;
graph. insertEdge ( 1 , 3 , 1 ) ;
graph. insertEdge ( 1 , 4 , 1 ) ;
graph. show ( ) ;
}
}
BFS代码实现
1.Graph class
public class Graph {
public ArrayList < String > vertex;
public int [ ] [ ] EdgeWeight ;
public int NumOfEdge ;
public boolean [ ] visited;
public Graph ( int n) {
vertex= new ArrayList < String > ( ) ;
EdgeWeight = new int [ n] [ n] ;
NumOfEdge = 0 ;
visited= new boolean [ n] ;
}
public void inserVertex ( String vertexs) {
vertex. add ( vertexs) ;
}
public void insertEdge ( int v1, int v2, int weight) {
EdgeWeight [ v1] [ v2] = weight;
EdgeWeight [ v2] [ v1] = weight;
NumOfEdge ++ ;
}
public String getVertexValue ( int i) {
return vertex. get ( i) ;
}
public int getNumOfVertex ( ) {
return vertex. size ( ) ;
}
public int getNumOfEdge ( ) {
return NumOfEdge ;
}
public void show ( ) {
for ( int [ ] edgeweight: EdgeWeight ) {
System . err. println ( Arrays . toString ( edgeweight) ) ;
}
}
public void bfs ( int [ ] [ ] edgeWeight, int v) {
LinkedList < Integer > queue = new LinkedList < > ( ) ;
queue. addLast ( v) ;
visited[ v] = true ;
while ( ! queue. isEmpty ( ) ) {
for ( int w = 0 ; w < edgeWeight. length; w++ ) {
if ( edgeWeight[ queue. getFirst ( ) ] [ w] == 1 && ! visited[ w] ) {
queue. addLast ( w) ;
visited[ w] = true ;
}
}
System . out. println ( getVertexValue ( queue. getFirst ( ) ) ) ;
queue. removeFirst ( ) ;
}
}
public void bfs ( ) {
bfs ( EdgeWeight , 2 ) ;
}
}
2.DemoMain class
public class DemoMain {
public static void main ( String [ ] args) {
int n= 6 ;
String [ ] vertexs= { "A" , "B" , "C" , "D" , "E" , "F" } ;
Graph graph = new Graph ( n) ;
for ( String vertex : vertexs) {
graph. inserVertex ( vertex) ;
}
graph. insertEdge ( 0 , 1 , 1 ) ;
graph. insertEdge ( 0 , 2 , 1 ) ;
graph. insertEdge ( 0 , 5 , 1 ) ;
graph. insertEdge ( 1 , 2 , 1 ) ;
graph. insertEdge ( 2 , 4 , 1 ) ;
graph. insertEdge ( 2 , 3 , 1 ) ;
graph. insertEdge ( 3 , 4 , 1 ) ;
graph. insertEdge ( 3 , 5 , 1 ) ;
graph. show ( ) ;
System . out. println ( "==========" ) ;
graph. bfs ( ) ;
}
}