编程要求: 图的表示:给定图数据文件(tinyG.txt),计算得到图的邻接矩阵,并把邻接矩阵保存到文件(tinyG_matrix.txt)中。类名:GraphRepresentation。
/**
* 程序功能:从文件读出图顶点边数以及点之间的关系,用邻接矩阵
* 表示并且保存至指定文件中
* 作者:冯得晟
* 时间:2014.04.2
*/
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class ExpressChart {
int v;
int e;
int[][] matrix;
static String srcpath="H:\\学习\\大三\\大三 下\\算法概论\\课后作业\\图\\tinyG.txt";
static String dispath="H:\\学习\\大三\\大三 下\\算法概论\\课后作业\\图\\tinyG_matrix.txt";
public ExpressChart(){
}
public ExpressChart(int var,int edg){
this.v=var;
this.e=edg;
this.matrix=new int[v][v];
}
void readFileByChars(String fileName) {
try{
Scanner scn=new Scanner(new File(fileName));
v=scn.nextInt();//读取文件第一个数字
System.out.println("图的节点个数是:"+v);
e=scn.nextInt();//读取文件第二个数
System.out.println("图的边的个数是:"+e);
ExpressChart ect=new ExpressChart(v,e);
for(int i=0;i<e;i++){
int a1=scn.nextInt();
int a2=scn.nextInt();
matrix=ect.getMatrix(a1, a2);
}
}catch(IOException e){
e.printStackTrace();
}
}
void writeFileByChars(String fileName){
try{
PrintWriter pw=new PrintWriter(new File(fileName));
for(int i=0;i<v;i++){
for(int j=0;j<v;j++){
pw.print(matrix[i][j]+"\t");
}
pw.println();
pw.flush(); //printwriter (file(fileName)) 用这种方式 需要刷新。
}
System.out.println("矩阵已存入文件。");
}catch(IOException e){
e.printStackTrace();
}
}
int [][] getMatrix(int v1,int v2){
matrix[v1][v2]=1;
matrix[v2][v1]=1;
return matrix;
}
public static void main(String[] args){
ExpressChart ec=new ExpressChart();
ec.readFileByChars(srcpath);
ec.writeFileByChars(dispath);
}
}
运行结果:
存储文件截图
编程总结:虽然这个题目比较简单,在做的过程中也暴露出编程功底弱的特点。譬如数组没有初始化就在使用,造成数组越界的错误。给自己的建议,不管这样的编程题目,都要每个小步骤都完成,譬如构造函数等,从零开始,就稳下来学。