在图中实现的基本操作之一就是搜索从一个顶点可以到达其他哪些顶点,或者找所有当前顶点可到达的顶点。有两种常用的方法可用来搜索图:深度优先搜索(DFS)和广度优先搜索(BFS),它们最终都会到达所有的连通顶点。深度优先搜索通过栈来实现(类似于树的前序遍历,树的前序遍历就是深度优先搜索的特殊版本),而广度优先搜索通过队列来实现(类似于树的层次遍历,树的层次遍历就是广度优先搜索的特殊版本)。具体的见下面的程序:
1. 图的存储结构为邻接矩阵
package graph;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction;
/**
* 存储结构为邻接矩阵
* @author Administrator
*
*/
public class Graph1 {
class Vertex{
//顶点类
public String data;
public boolean isVisted;
public Vertex(String data) {
this.data = data;
isVisted = false;
}
}
public final static int MAX_VERTEX = 25;//顶点个数最大值
public Vertex[] vertexArray;//顶点表
public boolean[][] edgeArray;//邻接矩阵
public int verNum;
public Stack<Integer> stack;
public Queue<Integer> queue;
//初始化图
public Graph1() {
vertexArray = new Vertex[MAX_VERTEX];
edgeArray = new boolean[MAX_VERTEX][MAX_VERTEX];
verNum = 0;
for(int i = 0; i < MAX_VERTEX; i ++)
for(int j = 0; j < MAX_VERTEX; j ++)
edgeArray[i]