package com.zhangweiwei;
public class Vt {
int data;
Edge adj;
}
package com.zhangweiwei;
public class Edge {
int dest;
Edge link;
Edge(int D)
{
dest=D;
link=null;
}
}
package com.zhangweiwei;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class GraphRev {
public static void main(String[] args) {
String path = "txt/tinyDG.txt";
ArrayList<Integer> list = read(path);
//图的顶点数
int vn=list.get(0);
//图的边数
int en=list.get(1);
int b[][] = new int[list.get(1)][2];
//顶点数组
int v[] = new int[list.size()];
//顶点数组初始化
for(int i=0;i<vn;i++){
v[i]=i;
}
//图的邻接表
int k=2; //最后一个
//将一位数组的值加入到二维数组中
for(int i=0;i<list.get(1);i++){
for(int j=0;j<2;j++){
b[i][j]=list.get(k);
k++;
}
}
GraphRev G=new GraphRev();
G.Graphadj(vn, v, en, b);
G.display();
}
static int DefalutSize=20;
private Vt NodeTable[]; //顶点表
private int NumVertices=0;
private int NumEdges=0;
public void Graphadj(int vn,int v[],int en,int e[][]){
//形参:顶点数 顶点数组 边数 边节点数组
//创建顶点表
NodeTable=new Vt[vn];
//输入顶点
for(int i=0;i<vn;i++){
InsertVt(v[i]);
}
//输入边
for(int i=0;i<en;i++)
{
InsertEdge(e[i][0],e[i][1]);
}
}
//增加结点
public boolean InsertVt(int Vt)
{
Vt t=new Vt();
t.data=Vt;
t.adj=null;
NodeTable[NumVertices]=t;
NumVertices++;
return true;
}
//增加边
public boolean InsertEdge(int v1,int v2){
if(v1>NumVertices||v1<0)
return false;
if(v2>NumVertices||v2<0)
return false;
//生成一个边结点
Edge E=new Edge(v2);
Edge p=NodeTable[v1].adj;
if(p==null)
NodeTable[v1].adj=E;
else{
while(p.link!=null) p=p.link;
p.link=E;
}
NumEdges++;
return true;
}
public void display(){
Edge p;
for(int i=0;i<NumVertices;i++){
System.out.print(NodeTable[i].data+":");
p=NodeTable[i].adj;
while(p!=null)
{
System.out.print(p.dest+" ");
p=p.link;
}
System.out.println();
}
}
// 读取文件到Arraylist 数组
public static ArrayList read(String path) {
ArrayList<Integer> list = new ArrayList<Integer>();
BufferedReader input = null;
try {
FileReader in = new FileReader(path);
input = new BufferedReader(in);
String ss;
try {
while ((ss = input.readLine()) != null) {
String[] s = (ss.split(" "));
for (int i = 0; i < s.length; i++) {
list.add(Integer.parseInt(s[i].trim())); // 将String
// s中的内容添加到动态数组中
}
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
in.close();
input.close();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return list;
}
}