6-1 邻接矩阵存储图的深度优先遍历(20 分)

试实现邻接矩阵存储图的深度优先遍历。

函数接口定义:

void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) );

其中MGraph是邻接矩阵存储的图,定义如下:

typedef struct GNode *PtrToGNode;
struct GNode{
int Nv; /* 顶点数 */
int Ne; /* 边数 */
WeightType G[MaxVertexNum][MaxVertexNum]; /* 邻接矩阵 */
};
typedef PtrToGNode MGraph; /* 以邻接矩阵存储的图类型 */

函数DFS应从第V个顶点出发递归地深度优先遍历图Graph,遍历时用裁判定义的函数Visit访问每个顶点。当访问邻接点时,要求按序号递增的顺序。题目保证V是图中的合法顶点。

裁判测试程序样例:

#include <stdio.h>

typedef enum {false, true} bool;
#define MaxVertexNum 10 /* 最大顶点数设为10 */
#define INFINITY 65535 /* ∞设为双字节无符号整数的最大值65535*/
typedef int Vertex; /* 用顶点下标表示顶点,为整型 */
typedef int WeightType; /* 边的权值设为整型 */ typedef struct GNode *PtrToGNode;
struct GNode{
int Nv; /* 顶点数 */
int Ne; /* 边数 */
WeightType G[MaxVertexNum][MaxVertexNum]; /* 邻接矩阵 */
};
typedef PtrToGNode MGraph; /* 以邻接矩阵存储的图类型 */
bool Visited[MaxVertexNum]; /* 顶点的访问标记 */ MGraph CreateGraph(); /* 创建图并且将Visited初始化为false;裁判实现,细节不表 */ void Visit( Vertex V )
{
printf(" %d", V);
} void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); int main()
{
MGraph G;
Vertex V; G = CreateGraph();
scanf("%d", &V);
printf("DFS from %d:", V);
DFS(G, V, Visit); return ;
} /* 你的代码将被嵌在这里 */

输入样例:给定图如下

5

输出样例:

DFS from 5: 5 1 3 0 2 4 6

void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) )
{
Vertex i;
Visited[V] = 1;
Visit(V);
for(i = 0; i < Graph->Nv ; i++)
{
if(Graph->G[V][i] ==1&&!Visited[i])
{
DFS(Graph, i, Visit);
}
}
return;
}

  

 

最新文章

  1. FineBI:一个简单易用的自助BI工具
  2. Android签名机制
  3. HDU 5783 Divide the Sequence(数列划分)
  4. 字符串和json之间的互相转化
  5. jenkins2 pipeline 语法快速参考
  6. 慎得慌二u赫然共和任务i个屁
  7. Service Manager流程,派BC_REPLY,唤醒FregServer流程,返回BR_TRANSACTION_COMPLETE,睡眠等待proc-&amp;gt;wait
  8. ASUS S46CB 刷BIOS
  9. java之真假分页
  10. 漂亮CSS样式用户留言表单
  11. PyQtdeploy-V2.4 User Guide 中文 (二)
  12. idea热部署+自动编译
  13. powershell远程管理服务器磁盘空间的实现代码
  14. OpenGL教程(25) skybox
  15. Android 基本 Jackson Marshalling(serialize)/Unmarshalling(deserialize)
  16. MongoDB与SqlSugar与Ado.Net对比
  17. 【xsy1201】 随机游走 高斯消元
  18. cocos2dx常见Action(转)
  19. [您有新的未分配科技点]数位dp:从懵X到板子(例题:HDU2089 不要62)
  20. C# 利用反射动态创建对象[摘录]

热门文章

  1. 用nodejs 开发的智能提示
  2. 静态链表的C实现(基于数据结构 严蔚敏)
  3. Linq 连接运算符:Concat
  4. 新概念英语(1-107)It&#39;s Too Small.
  5. logback中appender继承
  6. python基础——继承与派生、组合
  7. SQLContext、HiveContext自定义函数注册
  8. Java-NIO(五):通道(Channel)的数据传输与内存映射文件
  9. Text-文本撤销
  10. js实现继承的5种方式