DFS用到递归,BFS要用到一个辅助队列

#include "stdafx.h"

#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<algorithm>
#include<numeric> using namespace std;
struct AMGraph {
vector<int> vexs;
vector<vector<int>> arcs;
int vecnums, arcnums;
};
class Solution
{
public:
vector<bool> vistied;
AMGraph createGraph()
{
AMGraph G;
G.vecnums = 5;
G.arcnums = 5;
vector<int> vec1 = { 0,1,0,0,0 };
vector<int> vec2 = { 1,0,1,1,0 };
vector<int> vec3 = { 0,1,0,0,1 };
vector<int> vec4 = { 0,1,0,0,1 };
vector<int> vec5 = { 0,0,1,1,0 };
vector<vector<int>>vec;
vec.push_back(vec1);
vec.push_back(vec2);
vec.push_back(vec3);
vec.push_back(vec4);
vec.push_back(vec5); G.vexs = { 1,2,3,4,5 };
G.arcs = vec;
return G;
}
void DFS(AMGraph G,int v)
{
vistied[v] = true;
cout << v<<" ";
for (int i = 0;i < G.vecnums;i++)
{
if (G.arcs[v][i]==1 && vistied[i] == false)
{
DFS(G, i);
}
}
} void DFSTravers(AMGraph G)
{
vistied.clear();
for (int i = 0;i < G.vecnums;i++)
{
vistied.push_back(false);
}
for (int i = 0;i < G.arcnums;i++)
{
if (vistied[i] == false)
{
DFS(G, i);
}
}
cout << endl;
} queue<int> qu;
void BFS(AMGraph G,int v)
{
vistied[v] = true;
qu.push(v);
while (!qu.empty())
{
int v = qu.front();
qu.pop();
cout << v << " ";
for (int i = 0;i < G.vecnums;i++)
{
if (G.arcs[v][i] == 1 && vistied[i] == false)
{
vistied[i] = true;
qu.push(i);
}
}
} }
void BFSTravers(AMGraph G)
{
vistied.clear();
for (int i = 0;i < G.vecnums;i++)
{
vistied.push_back(false);
}
for (int i = 0;i < G.vecnums;i++)
{
if (vistied[i] == false)
{
BFS(G, i);
}
}
cout << endl;
}
}; int main()
{ Solution so;
AMGraph G=so.createGraph();
so.DFSTravers(G);
so.BFSTravers(G);
return 0; }

BFS 和 DFS的更多相关文章

  1. HDU-4607 Park Visit bfs | DP | dfs

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果m<=k+1,那么答案就是m.如果m>k+1,那么最 ...

  2. BFS和DFS详解

    BFS和DFS详解以及java实现 前言 图在算法世界中的重要地位是不言而喻的,曾经看到一篇Google的工程师写的一篇<Get that job at Google!>文章中说到面试官问 ...

  3. 算法录 之 BFS和DFS

    说一下BFS和DFS,这是个比较重要的概念,是很多很多算法的基础. 不过在说这个之前需要先说一下图和树,当然这里的图不是自拍的图片了,树也不是能结苹果的树了.这里要说的是图论和数学里面的概念. 以上概 ...

  4. hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  5. 算法学习之BFS、DFS入门

    算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...

  6. 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/19617187 图的存储结构 本文的重点在于图的深度优先搜索(DFS)和广度优先搜索(BFS ...

  7. ACM__搜素之BFS与DFS

    BFS(Breadth_First_Search) DFS(Depth_First_Search) 拿图来说 BFS过程,以1为根节点,1与2,3相连,找到了2,3,继续搜2,2与4,相连,找到了4, ...

  8. BFS和DFS算法

    昨晚刚昨晚华为笔试题,用到了BFS和DFS,可惜自己学艺不精,忘记了实现原理,现在借用大佬写的内容给自己做个提高 转自:https://www.jianshu.com/p/70952b51f0c8 图 ...

  9. 通俗理解BFS和DFS,附基本模板

    1.BFS(宽度优先搜索):使用队列来保存未被检测的节点,按照宽度优先的顺序被访问和进出队列 打个比方:(1)类似于树的按层次遍历 (2)你的眼镜掉在了地上,你趴在地上,你总是先摸离你最近的地方,如果 ...

  10. [Algorithms] Graph Traversal (BFS and DFS)

    Graph is an important data structure and has many important applications. Moreover, grach traversal ...

随机推荐

  1. luogu P1075 质因数分解

    题目描述 已知正整数n是两个不同的质数的乘积,试求出两者中较大的那个质数. 输入输出格式 输入格式: 输入只有一行,包含一个正整数n. 输出格式: 输出只有一行,包含一个正整数p,即较大的那个质数. ...

  2. [CP1804]组合数问题2

    题目大意: 给定两个数$n(n\le10^6)$和$k(k\le10^5)$,找到$k$个不同的满足$0\le b\le a\le n$的组合数$\binom a b$,求这$k$个组合数的最大值. ...

  3. hdu 4826 Labyrinth DP

    题目链接:HDU - 4826 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向 ...

  4. Android开发之如何保证Service不被杀掉(broadcast+system/app

    Android开发之如何保证Service不被杀掉(broadcast+system/app) 序言 最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作 ...

  5. 如何暂停sqlserver数据订阅服务

    原文:如何暂停sqlserver数据订阅服务 从 Management Studio 启动和停止快照代理或日志读取器代理 在 Management Studio 中连接到发布服务器,然后展开服务器节点 ...

  6. c++中resize这个函数怎么用

    c++中序列式容器的一个共性函数, vv.resize(int n,element)表示调整容器vv的大小为n,扩容后的每个元素的值为element,默认为0 resize()会改变容器的容量和当前元 ...

  7. JMeter之Ramp-up Period(in seconds)说明(可同时并发)(转载)

    Ramp-up Period(in seconds) [1]决定多长时间启动所有线程.如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行. ...

  8. 今天终于看了一下tanh函数的形式,双曲正切函数

    tanh = sinh / cosh sinh  = Hyperbolic sin cosh = Hyperbolic cos

  9. .Net强大的列表控件XPTable [转]

    .Net强大的列表控件XPTable http://blog.csdn.net/bodybo/article/details/7359531 XPTable的大名,想必C#开发的人都有所耳闻,使用下来 ...

  10. FormData上传文件同时附带其他参数

    前端js代码: function fileSubmit() { var formData = new FormData(); formData.append(].files[]); var type ...