1. 有向图中反向图构造。对tinyDG.txt(http://pan.baidu.com/s/1o6jWtcA)文件所表示的图,输出其邻接表表示 与 反向图的邻接表表示。类名:GraphReverse。博文标题:第五周作业——有向图邻接表表示及反向图构造
邻接表表示示例如下:
0:1 5
1:
2:0 3
……
这道题我的想法是先构造出有向图的一个二维数组,通过此数组来输出邻接表
package homework;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Scanner;
public class GraphReverse {
static String PathDG="src/tinyDG.txt";
static int vertexNum;//顶点数目
static int arcNum;//边的数目
static int arc1[][];//存放第一个有向图的边的数组
static int arc2[][];//存放反向图的边的数组
public static void main(String args[]){
try{
File DGfile=new File(PathDG);
Scanner scanner=new Scanner(DGfile);
vertexNum=scanner.nextInt();
arcNum=scanner.nextInt();
arc1=new int[vertexNum][vertexNum];
arc2=new int[vertexNum][vertexNum];
for(int i=0;i<arcNum;i++){
int v1=scanner.nextInt();
int v2=scanner.nextInt();
int v3=v2;
int v4=v1;
addEdge(v1, v2);
addEdge1(v3, v4);
}
System.out.println("有向图邻接表:");
for(int i=0;i<vertexNum;i++){
System.out.print(i+":");
for(int j=0;j<vertexNum;j++){
//System.out.print(arc[i][j]+" ");
if(arc1[i][j]==1){
System.out.print(j+" ");
}
}
System.out.println(" ");
}
System.out.println("反向图邻接表:");
for(int i=0;i<vertexNum;i++){
System.out.print(i+":");
for(int j=0;j<vertexNum;j++){
//System.out.print(arc[i][j]+" ");
if(arc2[i][j]==1){
System.out.print(j+" ");
}
}
System.out.println(" ");
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void addEdge(int v1,int v2){
arc1[v1][v2]=1;
}
public static void addEdge1(int v1,int v2){
arc2[v1][v2]=1;
}
}