一:深度优先遍历
深度优先遍历是从图的某个顶点出发,访问此顶点,并依次从该节点的未被访问的邻接点出发深度优先遍历该图;
简言之就是从某一结点V出发,一条路走到底遍历V的邻接点,直到访问不了剩下的结点再回到最开始的V后面接着往下走
深度优先遍历邻接表储存的图:
public void DFS(ALGraph G,int i){
Visit(G.List[i].vertex);
G.List[i].isReaded=true;
ENode pENode=G.List[i].next;
while (pENode != null) {
int j=pENode.adjvex;
if (G.List[j].isReaded!=true) {
DFS(G,j);
}
pENode=pENode.next;
}
}
public void Visit(char v){
System.out.println(v+" ");
}
二:广度优先遍历
广度优先遍历就是从图的某个顶点V出发,在访问了V之后,依次访问V的各个未被访问过的邻接点,然后按访问的顺序,再分别从这些邻接点出发依次访问它们的邻接点。按照一层一层的来遍历;
代码实现广度优先遍历邻接矩阵存储的图:
public void BFS(Graph g,int i){
int Q[]=new int[100];
int front=0,rear=-1;
Visit(g.vexs[i]);
g.isReaded[i]=true;
rear++;
Q[rear]=i;
while(front<=rear){
i=Q[front];
front++;
for (int j = 0; j < g.Vnum; j++) {
if(g.edges[i][j]==1&&g.isReaded[j]==false){
Visit(g.vexs[j]);
g.isReaded[j]=true;
rear++;
Q[rear]=j;
}
}
}
}
public void BFST(Graph g){
for (int i = 0; i < g.Vnum; i++) {
if (g.isReaded[i]==false) {
BFS(g, i);
}
}
}