2015年大二上-数据结构-图-1-(3)图遍历算法实现

测试时用的图是《2015年大二上-数据结构-图-1-(3)图遍历算法实现》

/*
*Copyright (c) 2014,烟台大学计算机学院
*All rights reserved.
*文件名称:Annpion.cpp
*作者:王耀鹏
*完成日期:2016年1月24日
*版本号:v1.0
*
*问题描述:图遍历算法实现
*输入描述:无
*输出描述:图的遍历
*/
#include <stdio.h>
#include <malloc.h>
#include "Graph.h"

int visited[MAXV];
void DFS(ALGraph *G, int v)//深度优先遍历
{
    int w;
    ArcNode *p;
    p=G->adjlist[v].firstarc;
    visited[v]=1;
    printf("%d ",v);
    while(p!=NULL)
    {
        w=p->adjvex;
        if(visited[w]==0)
            DFS(G,w);
        p=p->nextarc;
    }
}
void BFS(ALGraph *G, int v)//广度优先遍历
{
    ArcNode *p;
    int w,i,queue[MAXV],visited[MAXV],front=0,rear=0;
    for(i=0; i<G->n; ++i)
        visited[i]=0;
        printf("%d ",v);
    visited[v]=1;
    rear=(rear+1)%MAXV;
    queue[rear]=v;
    while(front!=rear)
    {
        front=(front+1)%MAXV;
        w=queue[front];
        p=G->adjlist[w].firstarc;
        while(p!=NULL)
        {
            if(visited[p->adjvex]==0)
            {
                printf("%d ",p->adjvex);
                visited[p->adjvex]=1;
                rear=(rear+1)%MAXV;
                queue[rear]=p->adjvex;
            }
            p=p->nextarc;
        }
    }
    printf("\n");
}
int main()
{
    int i;
    ALGraph *G;
    int A[5][5]=
    {
        {0,1,0,1,0},
        {1,0,1,0,0},
        {0,1,0,1,1},
        {1,0,1,0,1},
        {0,0,1,1,0}
    };
    ArrayToList(A[0], 5, G);

    for(i=0; i<MAXV; i++) visited[i]=0;
    printf(" 由2开始深度遍历:");
    DFS(G, 2);
    printf("\n");

    for(i=0; i<MAXV; i++) visited[i]=0;
    printf(" 由0开始深度遍历:");
    DFS(G, 0);
    printf("\n");
    printf(" 由2开始广度遍历:");
    BFS(G, 2);

    printf(" 由0开始广度遍历:");
    BFS(G, 0);
    return 0;
}

运行结果:

《2015年大二上-数据结构-图-1-(3)图遍历算法实现》

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/Annpion/article/details/50573068
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注