#include<iostream>
#include<string>
#include<list>
#include<queue>
#include<stack>using namespace std;class Graph
{int n;   //结点个数list<int> *adj;       //邻接表
public:Graph(int _n){n = _n;adj = new list<int>[n];}~Graph(){delete adj;}   void addEdge(int v, int w){adj[v].push_back(w);     //默认为有向图 //adj[w].push_back(v);     //无向图的话 }void DFSUtils(int s, bool *visited){visited[s] = true;cout<<s<<" ";list<int>::iterator it;for(it = adj[s].begin(); it != adj[s].end(); it++){if(!visited[*it]){DFSUtils(*it,visited);}} }void DFS(){bool *visited = new bool[n];for(int i = 0; i < n; i++){visited[i] = false;} for(int i = 0; i < n; i++){if(!visited[i]){DFSUtils(i,visited);cout<<";";           //每个连通分量用";"分隔 }}}void BFSUtils(int s,bool *visited){ queue<int> q;visited[s] = true;q.push(s);list<int>::iterator it;while(!q.empty()){s = q.front();q.pop();cout<<s<<" ";for(it = adj[s].begin(); it != adj[s].end(); it++){if(!visited[*it]){visited[*it] = true;q.push(*it);}} }} void BFS(){bool *visited = new bool[n];for(int i = 0; i < n; i++){visited[i] = false;}for(int i = 0; i < n; i++){if(!visited[i]){BFSUtils(i,visited);cout<<";";          //每个连通分量用";"分隔 }}}void DFSUtils_iter(int s,vector<bool> &visited){  stack<int> stk;stk.push(s);cout<<s<<" ";visited[s] = true; list<int>::iterator it;while(!stk.empty()){s = stk.top();stk.pop();for(it = adj[s].begin(); it != adj[s].end(); it++){if(!visited[*it]){stk.push(*it);cout<<*it<<" ";visited[*it] = true; }}} }void DFS_iter(){vector<bool> visited(n,false);for(int i = 0; i < n; i++){if(!visited[i]){DFSUtils_iter(i,visited);cout<<";";      //每个连通分量用";"分隔 }} }
};
int main()
{ Graph g(5); g.addEdge(0, 1); g.addEdge(0, 2); g.addEdge(1, 2); g.addEdge(2, 0); g.addEdge(2, 3); g.addEdge(3, 3); g.addEdge(4, 3);g.addEdge(4, 2);cout<<"图的深度优先"<<endl;g.DFS(); cout <<"\n图的广度优先:"<<endl; g.BFS(); cout<<"\n图的深度优先(非递归)"<<endl;g.DFS_iter();return 0;
}

结果:
//每个连通分量用";"分隔
1、有向图:

2、无向图:addEdge要改成这样

 void addEdge(int v, int w){adj[v].push_back(w);     //默认为有向图 adj[w].push_back(v);     //无向图的话 }

图(用list邻接表表示)的深度优先和广度优先(递归和非递归实现)相关推荐

  1. 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.深度优先遍历 1.1.深度优先的遍历过程 1.2.深度优先的遍历实现代码 二.广度优先遍历 2.1.广度优先的遍历过程 2.2.广度优先的遍历实现代码 三.源码测试效果 3 ...

  2. 数据结构之图:邻接矩阵和邻接表、深度优先遍历和广度优先遍历

    简介 线性表是一种线性结构,除了头结点和尾节点,线性表的每个元素都只有一个前取节点和一个后继节点.而树结构则相较于线性表更加复杂,它描述的关系为数据元素之间的父子关系,也是现实世界父子关系的缩影, 一 ...

  3. 算法6.6 采用邻接表表示图的深度优先搜索遍历

    算法6.6 采用邻接表表示图的深度优先搜索遍历 代码实现 #pragma once #include <iostream>using namespace std;//图的邻接表存储表示 # ...

  4. 图2——利用邻接表创建有向图

    图2--利用邻接表创建有向图 图 假设以邻接表作为图的存储结构,编写算法,创建有向图并输出邻接表. 主要考查对邻接表的理解.图的邻接表分为两个部分:表头结点和边表结点,因此创建有向图也分成两部分:一是 ...

  5. 用邻接表存储图c语言,邻接表、邻接多重表、十字链表及C语言实现

    上一节介绍了如何使用顺序存储结构存储邻接多重表和 邻接的意思是顶点之间有边或者弧存在,通过当前顶点,可以直接找到下一个顶点. 邻接表 使用邻接表存储图时,对于图中的每一个顶点和它相关的邻接点,都存储到 ...

  6. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  7. 树与二叉树的深度优先与广度优先算法(递归与非递归)

    本博客前面文章已对树与二叉树有过简单的介绍,本文主要是重点介绍有关二叉树的一些具体操作与应用 阅读本文前,可以先参考本博客 各种基本算法实现小结(三)-- 树与二叉树   和  各种基本算法实现小结( ...

  8. 图的邻接表存储与深度优先遍历代码实现

    Graph.h Vnode结构成员firstarc在定义时赋初值NULL,在Visual Stdio 2013下编译通过,VC6.0就不行(非静态数据成员不能初始化) #include <std ...

  9. 图:图的邻接表创建、深度优先遍历和广度优先遍历代码实现

    邻接表介绍 邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构比较较浪费存储空间.如果不想浪费存储空间,大家肯定会先到链表.需要空间的时候再才想内存去申请,同样适用于图 ...

最新文章

  1. 云服务干掉的是运维。
  2. QC数据库恢复,解决SQL孤立用户问题
  3. MySQL——数据库的增删改操作
  4. 需求用例分析之三:补充规约
  5. Java Servlet监听器的分类
  6. owaspbwa tickets
  7. 《商业智能BI白皮书3.0》正式发布(附下载链接)
  8. python核心编程五——映像和集合
  9. 贝叶斯网络(Bayesian network))简介(PRML第8.1节总结)概率图模型(Graphical models)...
  10. 打开outlook2010里面的链接显示 “由于本机的限制,该操作已被取消。请与系统管理员联系。”解决方法...
  11. opencv基础---直方图均衡化(原理equalizeHist)
  12. python画曲线图-python怎么画曲线图
  13. python后台架构Django教程——项目配置setting
  14. 聊聊spring cloud gateway的SetStatusGatewayFilter
  15. java 异常java.lang.UnsupportedOperationException
  16. Autorun.inf病毒和qhbpriAppInit_DLLs专杀
  17. Mac M1 百度网盘客户端无法打开,网络连接不上
  18. MATLAB拟合圆函数
  19. 终于找到了IE6修复大全
  20. No code “EPSG:4326“ from authority “EPSG“

热门文章

  1. python下载-python
  2. python和java哪个好学-到底学python好还是学java比较好 哪个容易学习点
  3. 0基础学python有多难-对于几乎是零基础的人,直接学 Python 编程合适吗?
  4. python爬虫什么意思-Python爬虫可以做什么?
  5. 慢牛系列五:用百度语音识别添加自选股
  6. Error in mounted hook: “TypeError: Cannot read property ‘init‘ of undefined“
  7. 无限极分类php简单,创建无限极分类树型结构的简单方法
  8. 导入php项目_商业裂变,之项目技术实战(第九节:程序框架的安装)
  9. 开源网络监控管理系统:OpenNMS
  10. java 有趣注释_Java8 中有趣酷炫的小技巧