您的位置:首页 > 其它

第四周作业——图的表示

2014-04-03 20:51 309 查看
1. 图的表示:给定图数据文件(tinyG.txt),计算得到图的邻接矩阵,并把邻接矩阵保存到文件(tinyG_matrix.txt)中。类名:GraphRepresentation。摘自《Algorithms,
4th Edition》P522。博文标题:第四周作业——图的表示

====

package SYS4;

import java.io.*;
import java.util.*;

public class GraphRepresentation {

//将图数据用数组表示
public static ArrayList read(String path){
ArrayList<Integer> list=new ArrayList<Integer>();
BufferedReader input=null;

try{
FileReader in=new FileReader(path);
input=new BufferedReader(in);
String ss;

try{
while((ss=input.readLine())!=null){
String[] s=(ss.split(" "));
for(int i=0;i<s.length;i++){
list.add(Integer.parseInt(s[i].trim()));//?动态数组存储
}
}
}catch(IOException e){
e.printStackTrace();
}

in.close();
input.close();
}catch(Exception e){
e.printStackTrace();
}
return list;
}

//将图数据用邻接矩阵数组函数表示
public static int[][] FormGraph(ArrayList<Integer>list){
int v=list.get(0);//图的顶点
int e=list.get(1);//图的边

int arc[][]=new int[v][e];

for(int i=0;i<v;i++){
for(int j=0;j<v;j++){
arc[i][j]=0;
}
}

//用1表示相邻顶点存在边
for(int k=0;k<e;k++){
for(int l=2;l<(list.size()-2);l=l+2){
arc[list.get(l)][list.get(l+1)]=1;
arc[list.get(l+1)][list.get(l)]=1;
}
}

return arc;
}

//将生成的邻接矩阵写入文件 字节流
public static void write(int[][] arc){
File f=new File("e:/tinyG_matrix.txt");
FileOutputStream ff=null;
String a="",b="";

try{
ff=new FileOutputStream(f,false);
for(int i=0;i<arc.length;i++){
for(int j = 0;j<arc[0].length;j++){
a=a+String.valueOf(arc[i][j]);
}
a=a+"\t\n";
}
ff.write(a.getBytes());//写入
}catch(Exception e){
e.printStackTrace();
}

finally{//?
try{
ff.close();//关闭字节流
}catch(Exception e){
e.printStackTrace();
}
}
}

//主函数
public static void main(String[] args) {
// TODO Auto-generated method stub
String p="e:/tinyG.txt";
ArrayList<Integer> list=read(p);
int[][] arc=FormGraph(list);

for(int i=0;i<arc.length;i++){
for(int j=0;j<arc[0].length;j++){
System.out.print(arc[i][j]+" ");
}
System.out.println();
}
write(arc);
}

}

====

文件写入:tinyG_matrix.txt

====

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: