java图的遍历方式(深度遍历、广度遍历)

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

  java图的遍历方式(深度遍历、广度遍历)

  import java.util.*;

  /**

  * 这个例子是图的遍历的两种方式

  * 通过它,使我来理解图的遍历

  * Created on 2013-11-18

  * @version 0.1

  */

  public class DeptSearch

  {

  public static void main(String args[]){

  //构造需要点对象

  NodeT a=new NodeT(”a”);

  NodeT b=new NodeT(”b”);

  NodeT c=new NodeT(”c”);

  NodeT d=new NodeT(”d”);

  NodeT e=new NodeT(”e”);

  NodeT f=new NodeT(”f”);

  NodeT g=new NodeT(”g”);

  NodeT h=new NodeT(”h”);

  ArcT ab=new ArcT(a,b);

  ArcT ac=new ArcT(a,c);

  ArcT ad=new ArcT(a,d);

  ArcT ah=new ArcT(a,h);

  ArcT bc=new ArcT(b,c);

  ArcT de=new ArcT(d,e);

  ArcT ef=new ArcT(e,f);

  ArcT eg=new ArcT(e,g);

  ArcT hg=new ArcT(h,g);

  //建立它们的关系

  a.outgoing.add(ab);

  a.outgoing.add(ac);

  a.outgoing.add(ad);

  a.outgoing.add(ah);

  b.outgoing.add(bc);

  d.outgoing.add(de);

  e.outgoing.add(ef);

  e.outgoing.add(eg);

  h.outgoing.add(hg);

  //构造本对象

  DeptSearch search=new DeptSearch();

  //广度遍历

  System.out.println(”广度遍历如下:”);

  search.widthSearch(a);

  //深度遍历

  System.out.println(”深度遍历如下:”);

  List<NodeT> visited=new ArrayList<NodeT>();

  search.deptFisrtSearch(a,visited);

  }

  /*

  * 深度排序的方法

  * 这个方法的方式:按一个节点,一直深入的找下去,直到它没有节点为止

  * cur 当前的元素

  * visited 访问过的元素的集合

  */

  void deptFisrtSearch(NodeT cur,List<NodeT> visited){

  //被访问过了,就不访问,防止死循环

  if(visited.contains(cur)) return;

  visited.add(cur);

  System.out.println(”这个遍历的是:”+cur.word);

  for(int i=0;i<cur.outgoing.size();i++){

  //访问本点的结束点

  deptFisrtSearch(cur.outgoing.get(i)。end,visited);

  }

  }

  /**

[1][2]

即使是不成熟的尝试,也胜于胎死腹中的策略。

java图的遍历方式(深度遍历、广度遍历)

相关文章:

你感兴趣的文章:

标签云: