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

package javapage;

import java.io.File;
import java.io.FileInputStream;
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];
		    	  v2=lin[++i];
		    	  arc[v1][v2]=1;
		    	  arc[v2][v1]=1;
		      }
		      graphDFS(arc);
		}catch (Exception e) {
		  		e.printStackTrace();
		}

	}//读取txt文件并生成对应的邻接矩阵
	
	
	public static int time=1;
	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("tinyG.txt");
	}
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值