图的表示(数组)
图的数据结构
public class Graph {
public HashMap< Integer, Node> nodes;
public HashSet< Edge> edges;
public Graph ( ) {
nodes = new HashMap < > ( ) ;
edges = new HashSet < > ( ) ;
}
}
点的数据结构
public class Node {
public int value;
public int in;
public int out;
public ArrayList< Node> nexts;
public ArrayList< Edge> edges;
public Node ( int value) {
this . value = value;
in = 0 ;
out = 0 ;
nexts = new ArrayList < > ( ) ;
edges = new ArrayList < > ( ) ;
}
}
边的数据结构
public class Edge {
public int weight;
public Node from;
public Node to;
public Edge ( int weight, Node from, Node to) {
this . weight = weight;
this . from = from;
this . to = to;
}
}
生成图算法
public static Graph createGraph ( Integer[ ] [ ] matrix) {
Graph graph = new Graph ( ) ;
for ( int i = 0 ; i < matrix. length; i++ ) {
Integer from = matrix[ i] [ 0 ] ;
Integer to = matrix[ i] [ 1 ] ;
Integer weight = matrix[ i] [ 2 ] ;
if ( ! graph. nodes. containsKey ( from) ) {
graph. nodes. put ( from, new Node ( from) ) ;
}
if ( ! graph. nodes. containsKey ( to) ) {
graph. nodes. put ( to, new Node ( to) ) ;
}
Node fromNode = graph. nodes. get ( from) ;
Node toNode = graph. nodes. get ( to) ;
Edge newEdge = new Edge ( weight, fromNode, toNode) ;
fromNode. nexts. add ( toNode) ;
fromNode. out++ ;
toNode. in++ ;
fromNode. edges. add ( newEdge) ;
graph. edges. add ( newEdge) ;
}
return graph;
}