import java.util.ArrayList;
public class ListUDG {
//节点类
class vNode {
char data;
//存储和data形成边的另一顶点索引的链表
ArrayList<Integer> firstNode;
}
//创建存储节点数组
static vNode[] vertex = new vNode[200];
public ListUDG(char[] vex, char[][] edg) {
//对节点的数组初始化
for (int i = 0; i < vex.length; i++) {
vertex[i] = new vNode();
vertex[i].data = vex[i];
vertex[i].firstNode = null;
}
//遍历边的集合,并将边的顶点加到vNode类的链表里
for (int i = 0; i < edg.length; i++) {
char c1 = edg[i][0];
char c2 = edg[i][1];
int p1 = getPosition(c1);
int p2 = getPosition(c2);
if (vertex[p1].firstNode == null) {
vertex[p1].firstNode.add(0,p2);
} else
vertex[p1].firstNode.add(p2);
if (vertex[p2].firstNode == null) {
vertex[p2].firstNode.add(0,p1);
} else
vertex[p2].firstNode.add(p1);
}
}
private int getPosition(char c) {
for (int i = 0; i < vertex.length; i++)
if (vertex[i].data == c)
return i;
return -1;
}
public static void main(String[] args) {
char[] vexs = {'A', 'B', 'C', 'D', 'E', 'F', 'G','H','I','J','K'};
char[][] edges = new char[][]{
{'A', 'C'},
{'A', 'D'},
{'A', 'F'},
{'B', 'C'},
{'C', 'D'},
{'E', 'G'},
{'D', 'G'},
{'I','J'},
{'J','G'},};
ListUDG lu = new ListUDG(vexs,edges);
StringBuffer s = new StringBuffer();
///输出图
for (int i = 0; i < vexs.length; i++) {
s = null;
s.append(vertex[i].data + " ");
for (Integer num : vertex[i].firstNode)
s.append(num.toString() + " ");
System.out.println(s);
}
}
}