IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构:图的遍历 -> 正文阅读

[数据结构与算法]数据结构:图的遍历

图创建不懂的戳这,这节遍历是基于上节的图结构

图的遍历:从图的某个顶点出发,依次访问图中所有的顶点,每个顶点被访问一次且仅访问一次。
防止多次访问某一个顶点的思路:设置辅助数组visited[n],用来标记每个被访问的顶点,
初始化状态为visited[n]=0;如果顶点被访问到,则修改辅助数组的值 :visited[i]=1

深度遍历DFS

  • 访问顶点V
  • 依次从顶点V的未被访问的邻节点出发,进行深度优先搜索,直至和V有路径相通的顶点都被访问到。
  • 对于连通图进行遍历时,从一个顶点出发即可访问图中所有的顶点。
  • 对于非连通图进行遍历时,若图中尚有顶点未被访问,则另选一未曾访问的顶点作为起始点,进行深度优先搜索,直至所有顶点都被访问
void Graph::DFS(char v)//深度遍历
{
	bool* visited = new bool[NumVertex];
	for (int i = 0; i < NumVertex; ++i)
	{
		visited[i] = false;
	}
	int index = GetVertexIndex(v);//获取当前顶点的下标
	DFS(index, visited);
	delete[]visited;
	visited = nullptr;
}
void Graph::DFS(int index, bool* visited)//深度遍历
{
	cout << VerArr[index].m_VertexValue << " ";  //遍历当前顶点
	visited[index] = true;//标记为tue,说明被访问了
	Edge* p = VerArr[index].m_list;
	while (p)
	{
		//从当前顶点没有被访问的领结顶点开始继续DFS
		if (!visited[p->m_destvalue])
		{
			DFS(p->m_destvalue, visited);
		}
		//如果当前顶点的邻接顶点被访问,从下一个邻接顶点开始访问
		p = p->m_next;
	}
}

广度优先BFS

类似于树的按层次遍历
1、从图中某个顶点v出发,访问v
2、依次访问v的各个未被访问过的邻接点
3、分别从这些邻接点出发依次访问他们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”?被访问
4、重复3,直到所有已被访问的顶点的邻接点都被访问到。

//BFS遍历,广度
void Graph::BFS(char v)
{
	//定义标记数组,标记当前顶点是否被访问
	bool* visited = new bool[NumVertex];
	for (int i = 0; i < NumVertex; ++i)
	{
		visited[i] = false;
	}
	int index = GetVertexIndex(v);//获取当前顶点的下标
	if (index == -1)return;
	queue<int>que;//定义队列存储访问顶点的下标(邻接表里存储的是下标)
	int front;//标记对头元素
	Edge* p = nullptr;//指向当前顶点的边链表
	que.push(index);//将当前顶点入队
	cout << v<< " ";//打印即是访问顶点
	visited[index] = true;
	while (!que.empty())
	{
		front = que.front();
		que.pop();
		p = VerArr[front].m_list;//p指向当前顶点的邻接表
		//开始访问front所指的顶点所有未被访问邻接顶点
		while (p != nullptr)
		{
			if (!visited[p->m_destvalue])//如果邻接顶点没访问
			{
				cout << VerArr[p->m_destvalue].m_VertexValue << " ";//把没访问的值输出
				visited[p->m_destvalue] = true;//把他置为true,说明这下访问过了
				que.push(p->m_destvalue);//把他入队
			}
			p = p->m_next;//这条邻接表查看完了,查看下一条

		}
	}
	delete[]visited;
	visited = nullptr;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:59:49  更:2022-10-17 13:02:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:22:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码