结构体定义参考图的存储
深度优先:
int vistited[MAX] = {0};
void DFS(AdjGraph *G, int v){
ArcNode *p;
vistited[v] = 1;
printf("%d",v);
p = G->adjlist[v].firstarc;
while(p!=NULL){
if(vistited[p->adjvex]==0)
DFS(G,p->adjvex);
p = p->nextarc;
}
}
时间复杂度: O ( n + e ) O(n+e) O(n+e)
若采用邻接矩阵:时间复杂度: O ( n 2 ) O(n^2) O(n2)
广度优先:
void BFS(AdjGraph *G, int v){
int w,i;
ArcNode *p;
SqQueue * qu;
InitQueue(qu);
int visited[MAXV];
for(i=0;i < G->n;i++) visited[i]=0;
printf("%2d",v); //输出被访问顶点的编号
visited[v]=1;
enQueue(qu,v);
while (!QueueEmpty(qu)){
deQueue(qu,w);
p = G -> adjlist[w].firstarc; //指向w的第一个邻接点
while (p!=NULL){ // 查找w的所有邻接点
if(visited[p->adjvex]==0){
printf("%2d",p->adjvex);
visited[p->adjvex]=1;
enQueue(qu,p->adjvex);
}
p = p->nextarc; //找下一个邻接点
}
}
printf("\n");
}