第四周作业——图的表示

1、 图的表示:给定图数据文件(tinyG.txt),计算得到图的邻接矩阵,并把邻接矩阵保存到文件(tinyG_matrix.txt)中。类名:GraphRepresentation

package t4f1;

import java.io.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;

public class GraphRepresentation {
	public static int V=0,E=0;
	public static void Graph(String fileName){
		File file = new File(fileName);
		Reader reader = null;
		try {
		      //System.out.println("以字符为单位读取文件,一次读一个字符");
		       // 一次读一个字符
		      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];
		      for(int i=0;i<V;i++)
		    	  for(int j=0;j<V;j++)
		    		  arc[i][j]=0; //建立矩阵数组,同时初始化为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)//当读取的字符不是数字且已读取一个顶点的值
		    	  {
		    		  y2=2; t=t+1;
		    	  }
		    	  
		    	  if(y2==2){     //当已读取一个顶点的值
		    	     v2=v1; v1=y; y=0; y2=0;
		    	  }
		 
		    	  if(t==2)   //当已读取两个顶点值时,对应的邻接矩阵的值为1
		    	  {
		    		  arc[v2][v1]=1;
		    		  t=0;
		    	  }
		      }
		      reader.close();
		      System.out.println("V="+V);
		      System.out.println("E="+E);
		      for(int i=0;i<V;i++){
		    	  for(int j=0;j<V;j++)
		    	  {
		    		  System.out.print("  "+arc[i][j]);
		    	  }
		    	  System.out.println();
		      }
			  outPrint("G://tinyG_matrix.txt",arc);
		}catch (Exception e) {
		  		e.printStackTrace();
		}
	}
	
	public static void outPrint(String fileName,int[][]write){  //输出到txt
		try{
			byte[] chinese="邻接矩阵:".getBytes();
			byte[] newline = "\r\n".getBytes(); //用于输出换行
			FileOutputStream out = new FileOutputStream(fileName);
			out.write(chinese);
			out.write(newline);			//输出邻接矩阵
			for(int i=0;i<V;i++)
			{
				for(int j=0;j<V;j++)
				{
					if(write[i][j]==1)
						out.write('1');
					else
						out.write('0');
					out.write(' ');
				}
				out.write(newline);
			}
			out.close();
		}catch(FileNotFoundException e){
			System.out.println("Error: Cannot open file for writing.");
		}catch(IOException e){
			System.out.println("Error:Cannot write to file.");
		}
	}
	public static void main(String[] agrs){
		Graph("G:\\tinyG.txt");
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值