《算法概论》第五周作业——有向图邻接图表示及反向图表示

作业要求:

有向图中反向图构造。对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();
	}
}
}

输出结果:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值