图在数据结构中是很重要的一部分。
通过不同的遍历方法,得到不同的遍历结果。
图的遍历可以分为两种,深度优先遍历和广度优先遍历。
图的表示可是链表也可以是矩阵。
链表: 是结点和边的组合
矩阵是二维数组: a[i][j]表示i结点到j结点是否连通
图可分为有向图和无向连通图。
今天介绍无向连通图的两种遍历方法(java实现):
图的定义:
//结点,按照有向图完整定义
public class Node{
public int value;
public int in; //入度
public int out; //出度
public ArrayList<Node> nexts;
// public ArrayList<Edge> edges;
public Node(int value){
this.value = value;
this.in = 0;
this.out = 0;
nexts = new ArrayList();
// edges = new ArrayList();
}
}
广度优先遍历:
public static void bfs(Node node){//用队列来作为结点访问,存储
if(node == null){
return true;
}
Queue<Node> q = new LinkList(); //队列
HashSet<Node> map = new HashSet<Node>(); //无序ÿ