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

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


深度优先遍历(DFS):

源文件代码:

[cpp] view plain copy
  1. #include"head.h"    
  2. extern visited[MAXV];    
  3. void DFS(ALGraph *G, int v)    
  4. {    
  5.     ArcNode *p;    
  6.     int w;    
  7.     visited[v]=1;    
  8.     printf("%d ", v);    
  9.     p=G->adjlist[v].firstarc;    
  10.     while (p!=NULL)    
  11.     {    
  12.         w=p->adjvex;    
  13.         if (visited[w]==0)    
  14.             DFS(G,w);    
  15.         p=p->nextarc;    
  16.     }    
  17. }    
主函数代码:

[cpp] view plain copy
  1. #include"head.h"    
  2. int visited[MAXV];    
  3. int main()    
  4. {    
  5.     int i;    
  6.     ALGraph *G;    
  7.     int A[5][5]=    
  8.     {    
  9.         {0,1,0,1,0},    
  10.         {1,0,1,0,0},    
  11.         {0,1,0,1,1},    
  12.         {1,0,1,0,1},    
  13.         {0,0,1,1,0}    
  14.     };    
  15.     ArrayToList(A[0], 5, G);    
  16.     
  17.     for(i=0; i<MAXV; i++)     
  18.         visited[i]=0;    
  19.     printf(" 由2开始深度遍历:");    
  20.     DFS(G, 2);    
  21.     printf("\n");    
  22.     
  23.     for(i=0; i<MAXV; i++)     
  24.         visited[i]=0;    
  25.     printf(" 由0开始深度遍历:");    
  26.     DFS(G, 0);    
  27.     printf("\n");    
  28.     return 0;    
  29. }    
运行结果:

广度优先遍历(BFS):

源文件代码:

[cpp] view plain copy
  1. #include"head.h"    
  2. extern visited[MAXV];    
  3. void BFS(ALGraph *G, int v)    
  4. {    
  5.     ArcNode *p;    
  6.     int w,i;    
  7.     int queue[MAXV],front=0,rear=0; //定义循环队列    
  8.     int visited[MAXV];     //定义存放节点的访问标志的数组    
  9.     for (i=0; i<G->n; i++) visited[i]=0; //访问标志数组初始化    
  10.     printf("%2d",v);            //输出被访问顶点的编号    
  11.     visited[v]=1;                       //置已访问标记    
  12.     rear=(rear+1)%MAXV;    
  13.     queue[rear]=v;              //v进队    
  14.     while (front!=rear)         //若队列不空时循环    
  15.     {    
  16.         front=(front+1)%MAXV;    
  17.         w=queue[front];             //出队并赋给w    
  18.         p=G->adjlist[w].firstarc;   //找w的第一个的邻接点    
  19.         while (p!=NULL)    
  20.         {    
  21.             if (visited[p->adjvex]==0)    
  22.             {    
  23.                 printf("%2d",p->adjvex); //访问之    
  24.                 visited[p->adjvex]=1;    
  25.                 rear=(rear+1)%MAXV; //该顶点进队    
  26.                 queue[rear]=p->adjvex;    
  27.             }    
  28.             p=p->nextarc;       //找下一个邻接顶点    
  29.         }    
  30.     }    
  31.     printf("\n");    
  32. }    
主函数代码:

[cpp] view plain copy
  1. #include"head.h"    
  2. int visited[MAXV];    
  3.     
  4. int main()    
  5. {    
  6.     ALGraph *G;    
  7.     int A[5][5]=    
  8.     {    
  9.         {0,1,0,1,0},    
  10.         {1,0,1,0,0},    
  11.         {0,1,0,1,1},    
  12.         {1,0,1,0,1},    
  13.         {0,0,1,1,0}    
  14.     };    
  15.     ArrayToList(A[0], 5, G);    
  16.     
  17.     printf(" 由2开始广度遍历:");    
  18.     BFS(G, 2);    
  19.     
  20.     printf(" 由0开始广度遍历:");    
  21.     BFS(G, 0);    
  22.     return 0;    
  23. }    

运行结果:


知识点总结:

DFS和BFS的算法实现。

相关文章推荐

第十二周项目3 图遍历算法实现(2)

问题与代码
  • scmpart
  • scmpart
  • 2015年11月27日 08:39
  • 148

第十二周上机实践—项目3—图遍历算法实现

/* *Copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者:林莉 *完成日期:2015年11月...
  • Lin1287
  • Lin1287
  • 2015年11月16日 16:54
  • 295

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

/*     Copyright (c)2016,烟台大学计算机与控制工程学院     All rights reserved.     文件名称:第十二周项目3 - 图遍历算法实现.cpp  ...

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

/* Copyright (c)2016,烟台大学计算机与控制工程学院 All rights reserved. 文...
  • Aoutlaw
  • Aoutlaw
  • 2016年11月17日 10:56
  • 135

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

问题描述及代码: /*  Copyright (c)2015,烟台大学计算机与控制工程学院   All rights reserved.   文件名称:项目3.cbp   作    者:张雯婧  完...

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

问题及代码: /* * Copyright (c) 2016, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:Cube007.cpp * 作 ...

第十二周项目3-图遍历算法实现(2)-广度优先遍历(BFS)

/*    * Copyright (c) 2016, 烟台大学计算机与控制工程学院    * All rights reserved。    * 文件名称 :1.cpp    * 作    ...
  • Gjyjj
  • Gjyjj
  • 2016年11月17日 10:51
  • 119

第十二周项目(3):图遍历算法实现——深度优先遍历

问题及代码: /* *烟台大学计算机与控制工程学院 *作 者:杨宁 *完成日期:2015年11月16日 *问题描述:实现图遍历算法,分别输出下图结构的深度优先遍历序列和广度优先遍历序列...
  • yn2333
  • yn2333
  • 2015年11月16日 17:04
  • 179

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

/* * Copyright (c) 2015, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称: main.cpp,graph.h,graph.cpp...

第十二周项目4——利用遍历思想求解图问题(3)(4)

/*       * Copyright (c)2016,烟台大学计算机与控制工程学院       * All rights reserved.       * 文件名称:wu.cpp     ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第十二周项目3-图遍历算法实现
举报原因:
原因补充:

(最多只允许输入30个字)