1.知识储备:
图的定义:
图的分类:
无向图:
连通图与非连通图
图的存储结构:
邻接矩阵:
邻接表:
一般采用邻接表实现:
API设计:
代码实现:
package Graph;
import Queue.Queue;
public class Graph {
//记录顶点数目
private final int V;
//边的数目
private int E;
//邻接表
private Queue[] adj;
public Graph(int V) {
// TODO Auto-generated constructor stub
this.V=V;
this.E=0;
//初始化邻接表
this.adj=new Queue[V];
for(int i=0;i<adj.length;i++){
adj[i]=new Queue<Integer>();
}
}
//获取顶点数目
public int V(){
return V;
}
//获取边的数目
public int E(){
return E;
}
//向图中添加一条边v-w
public void addEdge(int v,int w){
//在无向图中,边是没有方向的,所有该边既可以说是从v到w的边,又可以说是从w到v的边,因此,需要让w出现在v的邻接表中,并且还要让v出现在w的邻接表中
//入队列
adj[v].InQueue(w);
adj[w].InQueue(v);
//边的数量加1
E++;
}
//获取和顶点v相邻的所有顶点
public Queue<Integer> adj(int v){
return adj[v];
}
}
2.图的搜索: