图的遍历 -深度优先与广度优先 - C语言实现

结构体定义参考图的存储

深度优先:

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");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值