图的邻接表构建
详细描述(点击)

public class GraphDemo{
Map<String,Vertex> vertexMap;
class Vertex{
String name;
Edge next;
public Vertex(String name) {
this.name = name;
}
}
class Edge{
String name;
int weight;
Edge next;
public Edge(String name, int weight) {
this.name = name;
this.weight = weight;
}
}
public GraphDemo() {
this.vertexMap = new HashMap<>();
}
public void insertVertex(String vertexName) {
Vertex vertex = new Vertex(vertexName);
vertexMap.put(vertexName, vertex);
}
public void insertEdge(String begin,String end,int weight) {
Vertex beginVertex = vertexMap.get(begin);
if(beginVertex==null) {
beginVertex=new Vertex(begin);
vertexMap.put(begin, beginVertex);
}
Edge edge = new Edge(end, weight);
if(beginVertex.next==null) {
beginVertex.next=edge;
}else {
Edge lastEdge=beginVertex.next;
while(lastEdge.next!=null) {
lastEdge=lastEdge.next;
}
lastEdge.next=edge;
}
}
public void print() {
Set<Entry<String, Vertex>> set = vertexMap.entrySet();
Iterator<Entry<String, Vertex>> iterator = set.iterator();
while(iterator.hasNext()) {
Entry<String, Vertex> entry = iterator.next();
Vertex vertex = entry.getValue();
Edge edge = vertex.next;
while(edge!=null) {
System.out.println(vertex.name + " 指向 " + edge.name + " 权值为:" + edge.weight);
edge = edge.next;
}
}
}
public static void main(String[] args) {
GraphDemo graph = new GraphDemo();
graph.insertVertex("A");
graph.insertVertex("B");
graph.insertVertex("C");
graph.insertVertex("D");
graph.insertVertex("E");
graph.insertVertex("F");
graph.insertEdge("C", "A", 1);
graph.insertEdge("F", "C", 2);
graph.insertEdge("A", "B", 4);
graph.insertEdge("E", "B", 2);
graph.insertEdge("A", "D", 5);
graph.insertEdge("D", "F", 4);
graph.insertEdge("D", "E", 3);
graph.print();
}
}