bfs和dfs 模板
来源:互联网 发布:智业软件招聘 编辑:程序博客网 时间:2024/05/27 20:20
- #include<stdio.h>
- #define N 100
- /**DFS深度优先搜索是从图中的某个顶点出发,先访问初始点,然后访问其邻接点u(没有被访问过,下同),
- 再访问u的邻接点,一直到深入访问*/
- //邻接表结构
- typedef struct Anode
- {
- int adj; //终点位置
- struct Anode *next;//下一条边
- }ArcNode;
- typedef struct
- {
- ArcNode *firstarc; //头结点
- }VNode;
- typedef VNode AdjList[N];
- typedef struct
- {
- AdjList adjlist;
- int n; //图的顶点数
- }ALGraph;
- int visted[N];
- void DFS(ALGraph *g,int v)
- {
- for (int i=0;i<g->n;i++)visted[i] = 0; //初始化visted数组,用以记录该顶点是否被访问过
- visted[v] = 1; //访问初始点
- ArcNode *p = g->adjlist[v].firstarc;
- while(p!=NULL)
- {
- if (visted[p->adj]==0) //如果没有被访问过,则递归调用DFS访问
- DFS(g,p->adj);
- p = p->next; //继续下一条边
- }
- }
- /**BFS广度优先搜索,即先访问初始点v的所有没有被访问过的顶点,再一层一层向外扩张,可以采用队列来记录*/
- void BFS(ALGraph *g,int v)
- {
- for (int i=0;i<g->n;i++)visted[i] = 0;
- int queue[N],front,rear;
- front = rear = 0;
- rear = (rear+1)%N;
- queue[rear] = v; //v顶点入队
- int u;
- ArcNode *p;
- while(front!=rear)//当队列不空时
- {
- front = (front+1)%N;
- u = queue[front];
- p = g->adjlist[u].firstarc;
- while(p!=NULL) //首先访问u的所有节点
- {
- if (visted[p->adj]==0)
- {
- visted[p->adj] = 1; //访问p->adj节点,标记为访问
- rear = (rear+1)%N;
- queue[rear] = p->adj; //p->adj节点入队
- }
- p = p->next;
- }
- }
- }
0 0
- BFS和DFS模板
- DFS和BFS模板
- bfs和dfs 模板
- 模板--bfs和dfs
- DFS和BFS模板
- DFS、BFS和Backtracking模板
- 【算法模板之DFS和BFS】
- BFS&&DFS模板
- BFS/DFS 模板 代码
- BFS/DFS 模板 代码
- BFS/DFS 模板 代码
- BFS/DFS模板
- DFS&&BFS模板
- BFS DFS 模板
- DFS与BFS模板
- BFS+DFS 模板
- BFS/DFS模板
- DFS&&BFS模板
- android studio使用教程(八) 如何在project中删除module
- ViewPager简单实用以及如何移除当前的Fragment
- MFC 最小化到托盘及右击托盘菜单
- String常用方法(2)
- Django + mysql
- bfs和dfs 模板
- 设置开机不自动进入锁屏状态
- Android基础之使用Fragment控制切换多个页面
- Source Insight 配置和快捷键
- python excel神器xlwings
- google verify your account this device was reset
- su root: Authentication failure的解决
- 求bip动画文件
- ubuntu_socket通信传送文件_g++编译