图的基本数据结构及算法汇总

本文介绍了图的五种常见数据结构:邻接矩阵、邻接表、十字链表、邻接多重表和边集数组,并详细讲解了DFS、BFS、Prim、Kruskal、Dijsktra、Floyd、AOV网拓扑排序和AOE网求解关键路径等图的算法应用。通过理解这些基础知识,有助于提高代码的编写效率和可读性。
摘要由CSDN通过智能技术生成

图的数据结构常见有5种:

1.邻接矩阵2.邻接表3.十字链表4.邻接多重表5.边集数组

其中邻接矩阵与邻接表较为常用,可根据所研究图的结构(顶点与边)与算法复杂度进行选择。


图的常见问题及算法有下面几种:

1.DFS(邻接矩阵、邻接表)

深度优先遍历采用递归思想,逐渐深入,采用visited[ ]数组记录顶点是否被探索。

邻接矩阵:

#include <iostream>
using namespace std;
#define MAXVEX 100
#define MAXEDGE 100

#include <queue>
#include <stack>

class Graph
{
private:
	int G[MAXVEX][MAXVEX];
	int numvex;
	int numedge;
	bool visited[MAXVEX];
public:
	void DFS(int i);
	void DFSTraverse();
	void BFS();

	void Prim();

	void Kruskal();
	void Find(int *parent, int f);

	void Dijkstra();
	void Floyd();
};

void Graph::DFS(int i)
{
	visited[i] = true;
	for (int j = 0; j < numvex; j++)
	{
		if (visited[j] == false && G[i][j] == 1)
			DFS(j);
	}
}
void Graph::DFSTraverse()
{//初始化visited数组
	for (int i = 0; i < numvex; i++)
	{
		visited[i] = false;
	}

	for (int i = 0; i < numvex; i++)
	{//从每个顶点开始深度遍历
		if (visited[i] == false)
			DFS(i);
	}
}

邻接表:

void Graph::DFS(int i)
{
	visited[i] = true;
	EdgeNode *e = G[i].firstedge;

	while (e)
	{
		if (visited[e->adjvex] == false)
		{
			DFS(e->adjvex);
		}
		e = e->next;
	}
}
void Graph::DFSTraverse()
{
	for (int i = 0; i < numvex; i++)
	{
		visited[i] = false;
	}

	f
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值