1. 有向图中反向图构造。对tinyDG.txt(http://pan.baidu.com/s/1o6jWtcA)文件所表示的图,输出其邻接表表示 与 反向图的邻接表表示。类名:GraphReverse。
package t5f1;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class GraphReverse {
public static int V=0,E=0;
public static void Graph(String fileName){
File file = new File(fileName);
Reader reader = null;
try {
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
tempchar = reader.read();
while(tempchar!=10){
V=V*10+(tempchar-48);
tempchar = reader.read();
}//读取v的值,遇到回车字符时结束
tempchar = reader.read();//读取下一个字符
while(tempchar!=10){
E=E*10+(tempchar-48);
tempchar = reader.read();
}//读取v的值,遇到回车字符时结束
//*************************
int arc[][]=new int[V][V];
int cra[][]=new int[V][V];
int lin[]=new int[2*E];
for(int i=0;i<V;i++)
for(int j=0;j<V;j++){
arc[i][j]=0; //建立矩阵数组,同时初始化为0
cra[i][j]=0; //建立反向图的矩阵数组
}
int v1=0,v2=0,y=0,y2=0,t=0;
while((tempchar = reader.read())!=-1)
{
if(tempchar>=48 && tempchar<=57)
{
y=y*10+(tempchar-48);
y2=1;
}
if(tempchar<48 && y2==1)//当读取的字符不是数字且已读取一个顶点的值
{
lin[t]=y;
y=0;
y2=0;
t++;
}
}
reader.close();
for(int i=0;i<2*E;i++){
v1=lin[i];
i=i+1;
v2=lin[i];
arc[v1][v2]=1;
cra[v2][v1]=1;
}
//输出邻接表数组
System.out.println("有向图的邻接表表示");
for(int i=0;i<V;i++){
System.out.print(i+": ");
for(int j=0;j<V;j++){
if(arc[i][j]==1)
System.out.print(j+" ");
}
System.out.println();
}
System.out.println("反向图的邻接表表示");
for(int i=0;i<V;i++){
System.out.print(i+": ");
for(int j=0;j<V;j++){
if(cra[i][j]==1)
System.out.print(j+" ");
}
System.out.println();
}
}catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]){
Graph("G:\\tinyDG.txt");
}
}