第五周作业——有向图邻接表表示及反向图构造

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");
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值