zoukankan      html  css  js  c++  java
  • java实现图的深度优先遍历和广度优先遍

           首先需要知道的是,图的深度优先遍历是一种类似于树的前序遍历方式,即选择一个入口节点,沿着这个节点一直遍历下去,直至所有节点都被访问完毕;如果说,图的深度优先遍历类似于树的前序遍历的话,那么图的广度优先遍历就类似于树的层序遍历了,即一层一层的去遍历节点,直至所有节点都被访问完毕。

      不多说,直接上代码,会对部分代码添加说明。

    import java.util.*;
    public class Traverse{
      public static void main(String[] args){
         //接受输入,比如int类型,节点Node存储各个图节点;Path存储各个节点作为开始的路径
         Traverse tr = new Traverse();     
         System.out.print("深度优先遍历是:");
         ArrayList<Node>visited = new ArrayList<>();
         visited.add(a);
         tr.depthFirstSearch(a);
         System.out.print("广度优先遍历是:");
         tr.wudthSearch(a);
         }
      public void depthFirstSearch(Node a,List<Node> visited){
         for(int i=0;i<a.out.size();i++){
            Node cur = a.out.get(i).end;
                  //打印当前结点
            System.out.println(cur.node);
            if(!visited.contains(cur)){
              visited.add(cur);
              depthFirstSearch(cur,visited);
            }
         }
      }
       public void widthSearch(Node a){
         Set<Node> visited = new HashSet<>();
           Queue<Node> q = LinkedList<>();
           q.offer(a);
          while(!q.isEmpty()){
            Node cur = q.poll();
            //检查是否已访问该节点,避免重复访问
            if(!visited.contains(cur)){
              visited.add(cur);
                   //打印当前结点
                   System.out.println(cur.node);
            }
            for(int i =0;i<a.out.size();i++){
               q.offer(a.out.get(i).end);
            }
       }
      }
    }
        //节点
        class Node{
          int node;
          ArrayList<Path>out;
          public Node(int node){
            //初始化
            this.node = node ;
            out = new ArrayList<>()
          }
       }
        //路径
        class Path{
          Node start;
          Node end;
          public Path(Node start,Node end){
             this.start=start;
             this.end=end;
          }
      }
    
          
  • 相关阅读:
    onenote 使用手记0.3阶级
    尘埃落定:没有传说中k700i,官方只认可k700!
    【转】Ubuntu 9.10下安装Eclipse CDT 6.0
    四则运算
    文本内容统计
    《程序员修炼之道:从小工到专家》读后感(4)
    《程序员修炼之道:从小工到专家》读后感(5)
    多线程
    河北金力集团公文流转系统节选(2)
    动手动脑(6)文件和流
  • 原文地址:https://www.cnblogs.com/zy230530/p/7458465.html
Copyright © 2011-2022 走看看