图的遍历:DFS和BFS_请对这个图分别进行dfs和bfs_strawberry zong的博客-程序员宝宝

技术标签: 图论  

DFS

DFS即深度搜索,每次都沿着路径到不能再前进的时候才退回到最近的岔口。具体不再详细论述。
两个小概念
(1)连通分量: 在无向图中,如果有两个顶点可以相互到达(可以是通过一定的路径间接到达)那么就称这两个顶点连通。如果图中任意两个点都连通,则称图G为连通图;否则称它为非连通图,且称其中的极大连通子图为连通分量。
(2)强连通分量:在有向图中,如果两个顶点可以各自通过一条有向路径到达另一个顶点,就称这两个顶点强连通。如果图中任意两个顶点都强连通,则称图为强连通图;否则称图为非强连通图,且称其中的极大强连通子图为强连通分量。
伪代码:

DFS(u){
    
vis[u]=true;
	for(从u出发的所有顶点v) //枚举从u出发可以到达的所有顶点v
		if vis[v]=false
		DFS(v);
}
DFSTrave(G){
    
	for(G的所有顶点u)//对G的所有顶点u
		if vis[u]==false
			DFS(u);
}

邻接矩阵模板

int n,G[maxn][maxn];
bool vis[maxn]={
    false};

void DFS(int u,int depth)
{
    
	vis[u]=true;
	for(int v=0;v<n;v++)
	{
    
		if(vis[v]==false&&G[u][v]!=inf)
		DFS(v,depth+1);
	}
}

void DFSTrave()
{
    
	for(int u=0;u<n;u++)
	if(vis[u]==false)
		DFS(u,1);
}

邻接表模板

vector<int> Adj[maxn];
int n;
bool vis[maxn]={
    false};

void DFS(int u,int depth)
{
    
	vis[u]=false;
	for(int i=0;i<Adj[u].size();i++)
	{
    
		int v=Adj[u][i];
		if(vis[v]==false)
			DFS(v,depth+1);
	}
}

void DFSTrave()
{
    
	for(int u=0;u<n;u++)
		if(vis[u]==false)
			DFS(u,1);
}

BFS

即广度优先遍历,每次以扩散的方式向外访问顶点。使用BFS遍历需要一个队列,通过反复取出队首元素将该顶点可以达到的未曾加入过队列的顶点全部入队
伪代码:

BFS(u)
{
    
	queue q;
	将u入队;
	inq[u]=true;
	while(q非空)
	{
    
		取出q的队首元素u进行访问;
		for(从u出发可达的所有顶点v)
		{
    
			if(inf[v]==false)
			{
    
				将v入队;
				inq[v]=true; 
			}
		 } 
	 } 
}

邻接矩阵版

int n,G[maxn][maxn];
bool inq[maxn]={
    false};

void BFS(int u)
{
    
	queue <int> q;
	q.push(u);
	inq[u]=true;
	while(!q.empty())
	{
    
		int u=q.front();
		q.pop();
		for(int v=0;v<n;v++)
		{
    
			if(inq[v]==false&&G[u][v]!INF)
			{
    
				q.push(v);
				inq[v]=true;
			}
		}
	}
}
void BFSTrave()
{
    
	for(int u=0;u<n;u++)
	{
    
		if(inq[u]==false)
			BFS(q);
	}
}

邻接表

vector<int> Adj[maxn];
int n;
bool inq[amxn]={
    false};

void BFS(int u)
{
    
	queue<int> q;
	q.push(u);
	inq[u]=true;
	while(!q.empty())
	{
    
		int u=q.front();
		q.pop();
		for(int i=0;i<Adj[u].size;i++)
		{
    
			int v=Adj[u][i];
			if(inq[v]==false)
			{
    
				q.push(v);
				inq[v]=true;
			}
		}
	}
}
void BFSTrave()
{
    
	for(int u=0;u<n;u++)
	{
    
		if(inq[u]==false)
		{
    
			BFS(q);
		}
	}
}

以上摘自《算法笔记》
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<queue>
using namespace std;
int m[5][5];
int dy[4]={
    0,0,1,-1};
int dx[4]={
    1,-1,0,0};
struct f
{
    
	int x,y;
	int num;
	int path[30][2];
}en;
int k;
void bfs( )
{
    
	queue<f> q;
	f head,temp,now;
	head.x=0; head.y=0;head.num=0;
	q.push(head);
	while(!q.empty())
	{
    
		temp=q.front();
		q.pop();
		for(int i=0;i<4;i++)
		{
    
			now.x=temp.x+dx[i];
			now.y=temp.y+dy[i];
			if(now.x<0||now.x>4||now.y<0||now.y>4||m[now.x][now.y]==1)
			continue;
			if(m[now.x][now.y]==0)
			{
    
				m[now.x][now.y]=1;
				now.path[temp.num ][0]=temp.x;
				now.path[temp.num ][1]=temp.y;
				now.num=temp.num +1;
				q.push(now);
				if(now.x==4&&now.y==4)
				{
    
					now.path[now.num][0]=now.x;
					now.path[now.num][1]=now.y;
					now.num=now.num+1;
					en=now;
					return ;
			 	} 
			}
		}
	}
}
int main( )
{
    
	for(int i=0;i<5;i++)
		for(int j=0;j<5;j++)
			cin>>m[i][j];
			bfs();
			for(int i=0;i<en.num;i++)
			cout<<"("<<en.path[i][0]<<", "<<en.path[i][1]<<")"<<endl;
			return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44722533/article/details/104463956

智能推荐

使用IcoMoon将svg图片生成字体图标_敲代码有瘾的博客-程序员宝宝

1.进入IcoMoon官网 https://icomoon.io/点击iconmoon App按钮2.点击import icons按钮3.选中你的svg图片,然后点击Generate Font4.这里可以配置一些图标信息,然后点击下载5.下载完成解压后只需要将fonts和style.css保留就ok6.使用...

ZooKeeper中Session超时问题_坦GA的博客-程序员宝宝

原文地址:https://cwiki.apache.org/confluence/display/ZOOKEEPER/FAQHow should I handle SESSION_EXPIRED?SESSION_EXPIRED automatically closes the ZooKeeper handle. In a correctly operating cluste

彩色图像加密matlab算法,彩色图像文件认证加密算法_潜水队长的博客-程序员宝宝

为了实现对彩色图像的有效保护,我们提出了一种基于多混沌系统和图像认证功能的彩色图像加密算法。该加密算法通过对彩色图像RGB分量的运算生成128位Hash值,并把该Hash值作为部分图像加密的密钥。然后通过Logistic混沌系统、统一混沌系统和Hash值对彩色图像进行像素置乱和替代操作以实现图像文件加密。一、混沌系统混沌现象是非线性动力系统中出现的确定性的、类似随机的过程,这种过程既非周期,又不收...

Ruby开发环境搭建记录_aswang的博客-程序员宝宝

开发工具准备:1、ruby 1.8.7 点这里下载开发ruby的sdk,类似于jdk,如果是在windows下开发,建议下载RubyInstaller,即一键安装的exe格式的程序,安装很方便,直接next。需要注意的地方是,在最后点击完成之前,记得加ruby的安装路径加入到PATH,这里我们就可以在命令行中直接执行ruby执行了。 2、Eclipse-java 点这里下载...

斗破苍穹模拟器显示服务器人满,斗破苍穹手游服务器达到上限不能创建角色原因及解决方法..._道酝欣赏的博客-程序员宝宝

斗破苍穹手游是最近非常火的一个游戏,很多小伙伴都在玩这个游戏,最近有些小伙伴在说这个游戏不能创建新角色了,大家都在问这个是怎么回事?小编就为大家带来了斗破苍穹手游服务器达到上限不能创建角色原因及解决方法!斗破苍穹手游服务器达到上限不能创建角色怎么办?爆满提示:当前服角色创建数量已达上限,请前往其他服务器登录。解决方法:大家可以根据提示,到其他服务器进行登录,一般区服的数字越大, 证明这个服务器就是...

Elasticsearch 聚合_modest_zp的博客-程序员宝宝

示例数据# 创建索引PUT /hotel{ "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "title": { "type": "text" }, "city": { "type": "keyword" }, "price": { "type": "double"

随便推点

Android3.0升级后出现ButterKnife失效报错的问题解决_ok406lhq的博客-程序员宝宝

Error:Execution failed for task ':reading_routine:javaPreCompileDebug'.&amp;gt; Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to co...

开启电脑虚拟化功能_初于久歌的博客-程序员宝宝

一、查看笔记本是否支持虚拟化二、进入BIOS参考以下按键,开机时按住对应的键进入BIOS:组装机以主板分华硕按F8、Intel按F12,其他品牌按ESC、F11或F12;笔记本以品牌分联想ThinkPad系列按F1;其他品牌按F2;品牌台式机按品牌分,Dell按ESC;其他按F12;如果仍然不能进入BIOS,找找电脑(主板)说明书或者参考BIOS设置怎么进入图解教程。...

Activiti工作流之流程变量_空城1995的博客-程序员宝宝

1.什么是流程变量流程变量在 activiti 中是一个非常重要的角色,流程运转有时需要靠流程变量,业务系统和 activiti 结合时少不了流程变量,流程变量就是 activiti 在管理工作流时根据管理需要而设置的变量。比如在请假流程流转时如果请假天数大于 3 天则由总经理审核,否则由人事直接审核,请假天数就可以设置为流程变量,在流程流转时使用。注意:如果将 pojo 存储到流...

魔兽世界私服Trinity,从源码开始_trinity wow_猴小新的博客-程序员宝宝

缘起因由在一个无所事事的周末下午,突然想起魔兽世界,官方的账号很久没有上了,里面的大小号现在连满级都不是。以前曾经搭过传奇和星际争霸战网的私服自娱自乐,也听说过魔兽世界有开源的服务端模拟,既然兴致来了就小小的研究一下。目前魔兽世界的私服比较流行的是MaNGOS和Trinity,二者都是模拟魔兽世界服务端。MaNGOS“号称”是一个研究型项目,目的是为了学习大规模的C++项目开发,有

【Web Service】:IDEA+Spring Boot,Web Service服务端和客户端开发_idea webservice接口开发_说人话行不行的博客-程序员宝宝

一、服务端开发1、pom文件依赖 &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-web-services&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt;

黑马程序员-博客汇总_黑马程序员博客文章列表_z_one忘我的博客-程序员宝宝

在学校一直有j2se的基础,但还是有许多java基础不牢固的地方,于是便找blog配合java视频又学习了一遍,争取能把基础巩固好,避免在黑马的学习工程中由于基础问题而导致的力不从心。 下面是我写的blog: 这里写链接内容这里写链接内容这里写链接内容这里写链接内容这里写链接内容这里写链接内容这里写链接内容这里写链接内容这里写链接内容这里写链接内容

推荐文章

热门文章

相关标签