作业要求:
输出结果:
有向图中反向图构造。对tinyDG.txt(http://pan.baidu.com/s/1o6jWtcA)文件所表示的图,输出其邻接表表示 与 反向图的邻接表表示。类名:GraphReverse。博文标题:第五周作业——有向图邻接表表示及反向图构造
邻接表表示示例如下:
/**
* 程序功能:实现有向图邻接表以及反向图邻接表的表示
* 作者:冯得晟
* 时间:2014.04.9
*/
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;
public class digraph {
int v;
int e;
boolean isvisited[];
List<ArrayList<Integer>> SeqList;
List<ArrayList<Integer>> SequenceList;
public digraph(int v,int e,List<ArrayList<Integer>> List){
this.v=v;
isvisited=new boolean[v];
}
private void bfs(int v,List<ArrayList<Integer>> graphList){
Queue<Integer> que = new LinkedList<Integer>();
que.offer(v);
while (!que.isEmpty()) {
v = que.poll();
System.out.print(v+":");
isvisited[v] = true;
for (int i = 0; i <graphList.get(v).size(); i++) {
int k=graphList.get(v).get(i);
System.out.print(k+" ");
if (!isvisited[k]){
que.offer(k);
isvisited[k] = true;
}
}
System.out.println();
}
}
public static void main(String[] args){
String spath="H:\\学习\\大三\\大三 下\\算法概论\\课后作业\\图\\有向图\\tinyDG.txt";
try{
Scanner sc=new Scanner(new File(spath));
List<ArrayList<Integer>> SeqList=new ArrayList<ArrayList<Integer>>();
List<ArrayList<Integer>> SequenceList=new ArrayList<ArrayList<Integer>>();
int v=sc.nextInt();
int e=sc.nextInt();
for(int i=0;i<v;i++){
SeqList.add(new ArrayList<Integer>());
SequenceList.add(new ArrayList<Integer>());
}
for(int j=0;j<e;j++){
int a=sc.nextInt();
int b=sc.nextInt();
if(!SeqList.get(a).contains(b)){
SeqList.get(a).add(b);
}
if(!SequenceList.get(b).contains(a)){
SequenceList.get(b).add(a);
}
}
digraph g1=new digraph(v,e,SeqList);
System.out.println("有向图的邻接表的结果是:");
g1.bfs(v/2+1, SeqList);
System.out.println("有向图反向的邻接表的结果是:");
digraph g2=new digraph(v,e,SequenceList);
g2.bfs(1, SequenceList);
}catch(Exception e){
e.printStackTrace();
}
}
}
输出结果: