基本概念
1. 术语及表示方法
一般用G=(V,E)表示,包括一个点集和边集。
概念:稠密图、稀疏图、完全图;有向图与无向图;带权图与无权图;
表示方法:一般用邻接矩阵和邻接表(另有十字链表、邻接多重表等)
![]()
图的遍历
1. DFS
从某一个节点出发,沿着图的某一条分支搜索至末端,然后回溯,沿着另一分支搜索,依此类推。该过程会产生一课深度优先搜索树。
void DFStraverse(int v){ //从顶点v开始进行遍历
visited[v]=1;
System.out.print(v+" "); //输出访问顶点
for(int i=0;i<NumberOfnodes;i++){
if(graph[v][i]==1&&visited[i]==0){ //与v有边相连的顶点i,且顶点i还未被访问
DFStraverse(i);
}
}
}
2. BFS
BFS先访问起点的所有邻居点,再据此规则访问其他节点。如果图如为一个树结构,则BFS同树的层次遍历(从顶层开始,一层一层访问)。采用一个队列来实现。
void BFStraverse(int v){
visited[v]=1;
queue.add(v);
while(queue.size()>0){
int node=queue.get(0); //获取队首节点
queue.remove(0); //删除队首节点
//System.out.print(node+" "); //打印队首节点
for(int i=0;i<numNodes;i++){
if(graph[node][i]==1&&visited[i]==0){ //将顶点node的未访问邻居节点加入队列
queue.add(i);
visited[i]=1; //记得标记!!!
}
}
}
}