当前位置: 首页 > news >正文

图的深度优先遍历的非递归算法

实现图的深度优先遍历的非递归算法,图采用邻接表存储。

思想:将初始顶点入栈。然后出栈,如果出栈的这个顶点为被访问过,则将与该顶点相邻的所有顶点全部入栈,如果已经访问过,则略过。

代码:

typedef struct ArcNode{int adjvex;  //该边所指向的顶点的位置 struct ArcNode *next;//指向下一条边的指针 
}ArcNode;//顶点的结点结构 
typedef struct VNode{GElemType data;//顶点信息、ArcNode *first;//指向第一条依附该顶点的边的指针 
}VNode,AdjList[MVNum];//AdjList表示邻接表类型//图的结构定义 
typedef struct{VNode *vertices; //定义一个数组vertices,是vertex的复数形式int vexNum,arcNum; //图的当前顶点数和弧数
}ALGraph;//深度优先实现非递归遍历
void DFS(ALGraph &G,int v,bool *visited){int stack[MAXSIZE],top=-1;stack[++top]=v;//初始化入栈while(top != -1){//栈不为空 int w = stack[top--];//出栈//已经访问过则不在进行入栈if(visited[w]==true) continue;//没有被访问过visited[w] = true;printf("%d",w);//访问邻接结点ArcNode *p G.vertices[w].first;while(p != NULL){if(visited[p->adjvex]==false){//未访问过,则都入栈 stack[++top]=p->adjvex;}p=p->next;} } 
} 
void DFSTraverse(ALGraph &G){// 申请访问数组bool *visited = (bool*)malloc(sizeof(bool)*G.vexNum);//初始化访问数组for(int v=0;i<G.vexNum;++v) {visited[v]=false;}//对图进行遍历,因为图可能不是连通图for(int v=0;v<G.vexNum;++v){if(visited[v]==false){DFS(G,v,visited);}} free(visited);
} 


http://www.mrgr.cn/news/48004.html

相关文章:

  • 【超级详细】七牛云配置阿里云域名详细过程记录
  • 使用RabbitMQ
  • PaddleOCROCR关键信息抽取训练过程
  • Etcd注册中心基本实现
  • CV(7)--神经网络训练
  • 数学建模与数学建模竞赛
  • 服务端测试开发必备的技能:Mock测试!
  • 半周期检查-下降沿发上升沿采
  • AI语音助手在线版本
  • 数据结构与算法(八)循环链表
  • onnx代码解读
  • 摩托车一键启动智能钥匙提高了便捷性和安全性
  • 多元线性回归:机器学习中的经典模型探讨
  • HttpPost 类(构建 HTTP POST 请求)
  • 基于Springboot+Vue的网上订餐系统(含源码数据库)
  • 光伏“地图导航”:光照、政策、电价一目了然
  • 【p2p、分布式,区块链笔记 UPNP】: Libupnp test_init.c 02 初始化SDK --- UpnpInitPreamble
  • 如何创建一个node.js项目并配置
  • 【Lua学习】数值number和数学库math
  • MacOS 同时配置github、gitee和gitlab密钥
  • 信息安全数学基础(26)二次互反律
  • DevOps
  • 【Spring】@Autowired注解自动装配的过程
  • 2025届计算机保研经验贴(末九→浙江大学软件学院)
  • uniapp、微信小程序、Vue中使用nzh库实现数字转中文大写
  • 服务器部署‌Traefik 实现子级域名路由服务(对外子域名80,路由对内大端口)