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