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. Moving Average from Data Stream -- LeetCode

    Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...

  2. springboot + 拦截器 + 注解 实现自定义权限验证

    springboot + 拦截器 + 注解 实现自定义权限验证最近用到一种前端模板技术:jtwig,在权限控制上没有用springSecurity.因此用拦截器和注解结合实现了权限控制. 1.1 定义 ...

  3. linux 自动删除n天前文件

    现在系统每天生成一个日期文件夹,并压缩上传到ftp服务器,造成目录下文件太多,所以决定写个定时删除文件的任务 写脚本文件 find /home/data -mtime +90 -name " ...

  4. kubernetes1.5.2--部署监控服务

    本文基于kubernetes 1.5.2版本编写 Heapster是kubernetes集群监控工具.在1.2的时候,kubernetes的监控需要在node节点上运行cAdvisor作为agent收 ...

  5. 【Hadoop】Hadoop MR 自定义序列化类

    1.基本概念 2.Mapper代码 package com.ares.hadoop.mr.flowsum; import java.io.IOException; import org.apache. ...

  6. Error:[$parse:lexerr]

    1.错误描写叙述 2.错误原因 由错误提示可知,有关AngularJS代码不符合语法,导致报错 3.解决的方法 检查发现,title标签中的data-ng-bind属性使用方法有误 <title ...

  7. javaweb项目自定义错误页面

    当我们把一个web项目成功发布出去,但是有些页面还有待完善的时候,会出现404错误页面.这个会给用户很差的体验.如何将这些错误页面修改为自定义的错误页界面,给用户一些友好的提示呢? 首先我们在web. ...

  8. 按需要对Androguard进行定制增强

    按需对Androguard进行增强和定制修改 Androguard是一个对android应用程序进行分析的基于python的平台,功能强大.但是在使用的过程中,提供的功能不一定如我们所需,所以需要进行 ...

  9. Android Socket通信编程

    安卓客户端通过socket与服务器端通讯一般可以按照以下几个步骤:(1).通过IP地址和端口实例化Socket,请求连接服务器:socket = new Socket(HOST, PORT); //h ...

  10. python sqlite3 MySQLdb

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成. Python就 ...