您的位置:首页 > 其它

第四周作业——无向图的DFS算法

2014-04-03 20:06 423 查看
2.无向图的DFS算法:按照教材中的定义方式,完整实现图的DFS算法,给定图数据文件(tinyG.txt),能够输出DFS的节点遍历结果,及每个节点的Pre和Post值

package t4f1;

import java.io.File;
import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
//import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;

public class GraphDFS {
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 lin[]=new int[2*E];
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)//当读取的字符不是数字且已读取一个顶点的值
{
lin[t]=y;y=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;
arc[v2][v1]=1;
}
graphDFS(arc);
}catch (Exception e) {
e.printStackTrace();
}

}//读取txt文件并生成对应的邻接矩阵

public static int time=1,count=0;
public static int S[]=new int[V];
public static void graphDFS(int arc[][]){
int visited[]=new int[V];
int Pre[]=new int[V];
int Post[]=new int[V];
for(int i=0;i<V;i++){
visited[i]=0;
Pre[i]=0;
Post[i]=0;
}
for(int v=0;v<V;v++){
if(visited[v]==0)  //如果v还未被访问,就执行DFS()算法
DFS(arc,visited,Pre,Post,v);
}
for(int i=0;i<V;i++)   //输出顶点V与对应的pre值和post值
System.out.println(" V= "+i+" pre: "+Pre[i]+" post: "+Post[i]);
}
public static void DFS(int arc[][],int visited[],int Pre[],int Post[],int v){
visited[v]=1;
Pre[v]=time;
for(int w=0;w<V;w++){
if(visited[w]==0 && arc[v][w]==1){
time=time+1;
DFS(arc,visited,Pre,Post,w);
}
}
time=time+1;
Post[v]=time;
}
public static void main(String[] agrs){
Graph("G:\\tinyG.txt");
}
}


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