第十二周项目3-图遍历算法实现

    xiaoxiao2021-10-31  74

    /*     Copyright (c)2016,烟台大学计算机与控制工程学院     All rights reserved.     文件名称:第十二周项目3 - 图遍历算法实现.cpp     作    者:朱建豪     完成日期:2016年11月18日     版 本 号:v1.0          问题描述: 实现图遍历算法,分别输出如下图结构的深度优先(DFS)遍历序列和广度优先遍历(BFS)序列。      输入描述: 若干测试数据。     程序    

    深度优先遍历(DFS):

    源文件代码:

    [cpp]  view plain  copy #include"head.h"     extern visited[MAXV];     void DFS(ALGraph *G, int v)     {         ArcNode *p;         int w;         visited[v]=1;         printf("%d ", v);         p=G->adjlist[v].firstarc;         while (p!=NULL)         {             w=p->adjvex;             if (visited[w]==0)                 DFS(G,w);             p=p->nextarc;         }     }     主函数代码:

    [cpp]  view plain  copy #include"head.h"     int visited[MAXV];     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");         return 0;     }     运行结果:

    广度优先遍历(BFS):

    源文件代码:

    [cpp]  view plain  copy #include"head.h"     extern visited[MAXV];     void BFS(ALGraph *G, int v)     {         ArcNode *p;         int w,i;         int queue[MAXV],front=0,rear=0; //定义循环队列         int visited[MAXV];     //定义存放节点的访问标志的数组         for (i=0; i<G->n; i++) visited[i]=0; //访问标志数组初始化         printf("-",v);            //输出被访问顶点的编号         visited[v]=1;                       //置已访问标记         rear=(rear+1)%MAXV;         queue[rear]=v;              //v进队         while (front!=rear)         //若队列不空时循环         {             front=(front+1)%MAXV;             w=queue[front];             //出队并赋给w             p=G->adjlist[w].firstarc;   //找w的第一个的邻接点             while (p!=NULL)             {                 if (visited[p->adjvex]==0)                 {                     printf("-",p->adjvex); //访问之                     visited[p->adjvex]=1;                     rear=(rear+1)%MAXV; //该顶点进队                     queue[rear]=p->adjvex;                 }                 p=p->nextarc;       //找下一个邻接顶点             }         }         printf("\n");     }     主函数代码:

    [cpp]  view plain  copy #include"head.h"     int visited[MAXV];          int main()     {         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);              printf(" 由2开始广度遍历:");         BFS(G, 2);              printf(" 由0开始广度遍历:");         BFS(G, 0);         return 0;     }     运行结果:

    知识点总结:

    DFS和BFS的算法实现。

    转载请注明原文地址: https://ju.6miu.com/read-677918.html

    最新回复(0)