`
zgcypjhf
  • 浏览: 5417 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

图的深度和广度搜索算法

    博客分类:
  • C++
阅读更多

图是应用最为广泛的数据结构之一,图的搜索算法可以使我们发现图的很多结构信息。本文采用邻接表表示表,实现了图的深度和广度优先搜索算法(部分代码从网上参阅得来)。

第一步: 图的邻接表表示:

#include <iostream>
#include <stdlib.h>
#include <queue>

using namespace std;

// 邻接表表示
#define MAX_VERTEX_NUM 20   //最大顶点数
#define MAX_EDGE_NUM   40   //最大边数

int visited[MAX_VERTEX_NUM];

typedef int VertexType;           //顶点数据类型

typedef struct ArcNode
{
	int advex;                        //邻接点域
	int weight;                       //权值
	struct ArcNode *nextarc; //连接结点
	
}ArcNode;

typedef struct VNode
{
	VertexType data;
	ArcNode *firstarc;

}Vode, AdjList[MAX_VERTEX_NUM];

typedef struct
{
	AdjList vertices;
	int  vexnum, arcnum;
	int kind;
	
}ALGraph;

void CreateDG(ALGraph &G)
{

	int i, j, k;
	ArcNode *p;
	cout << "创建一个图: " << endl;
	cout << "顶点数: ";
	cin >> G.vexnum;
	cout << endl;

	cout << "边数: ";
	cin >> G.arcnum; 
	cout << endl;

	for (i = 0; i < G.vexnum; ++i)
	{

		G.vertices[i].data = i;
		G.vertices[i].firstarc = NULL;
	}

	for (k = 0; k < G.arcnum; ++k)
	{

		cout << "请输入第"<< k + 1 << "条边:";
		cin >> i >> j;

		p = new ArcNode();
		p->advex = j;
		
		p->nextarc = G.vertices[i].firstarc;
		G.vertices[i].firstarc = p;
	}

}

void Disp(ALGraph G)
{

	int i, j;
	ArcNode *p;
	cout << "输出图为:" << endl;
	
	for (i = 0; i < G.vexnum; ++i)
	{

		p = G.vertices[i].firstarc;
		j = 0;
		
		while(p != NULL)
		{

			cout << "(" << i << "," << p->advex << ")";
			p = p->nextarc;

			j = 1;

			
		}
		if (j == 1)

		cout << endl;
	}
}

 第二部分广度优先搜索和深度优先搜索

// 广度优先遍历图
void bfs(ALGraph G, int v)
{
   queue<VNode> q;
   q.push(G.vertices[v]);

   visited[v] = 1;

   VNode  vNode;   

   cout << v << " ";
   while (!q.empty())
   {
	  
		vNode = q.front();
		q.pop();

		ArcNode *p = vNode.firstarc;

		
		while(p != NULL)
		{
			if (visited[p->advex] == 0) 
			{
				cout << p->advex << " ";

				vNode.data = p->advex;
				vNode.firstarc = G.vertices[vNode.data].firstarc;
				q.push(vNode);
				
				visited[p->advex] = 1;

				p = p->nextarc;
			}
		}
   }


}
// 深度优先遍历图
void  dfs(ALGraph G, int v)
{
	ArcNode *p;

	cout << v << " ";
	visited[v] = 1;
	p = G.vertices[v].firstarc;

	while (p != NULL)
	{

		if (! visited[p->advex])
			dfs(G, p->advex);

		p = p->nextarc;
	}

	return;
}


void dfs1(ALGraph G)
{
	int i;

	for (i = 0; i < G.vexnum; ++i)
		if (visited[i] == 0)
			dfs(G, i);
}

 最后一步,代码测试:

void main()
{
        ALGraph G;
	CreateDG(G);

	int v;
	Disp(G);

	cout << "输入源顶点: ";
	cin >> v;
	
	cout << "选择遍历方式: " << endl;
	cout << "1 深度优先搜索 \t2 广度优先搜索" << endl;

	int flag;
	cin >> flag;
        if (flag == 1)
		dfs1(G);

	if (flag == 2)
		bfs(G, v);
  
       cout << endl;	
}

 就大功告成了。

0
1
分享到:
评论

相关推荐

    深度优先搜索算法和广度优先搜索算法

    深度优先搜索算法和广度优先搜索算法都是常用的图遍历算法,它们都可以用于解决图的遍历问题。但是,这两种算法有着不同的实现机制和应用场景。深度优先搜索算法更适合用于解决图的深度遍历问题,而广度优先搜索算法...

    图的深度和广度遍历算法

    通过算法实现图的深度优先遍历和广度优先遍历

    图的深度优先遍历和广度优先遍历算法

    "图的深度优先遍历和广度优先遍历算法" 图的深度遍历和广度遍历是两个重要的算法,这也是我们理解并掌握图这一数据结构的基础。通过此程序算法可以进一步掌握图的构造以及遍历的相关知识。 图的深度优先遍历算法 ...

    数据结构深度、广度优先搜索算法C语言版

    数据结构课程中的深度优先搜索算法、广度优先搜索算法的C语言程序,在Turbo C 2.0上调试通过。

    图的深度和广度优先搜索算法程序框架.doc

    本文将详细介绍图的深度和广度优先搜索算法的实现,包括邻接矩阵和邻接表的定义、深度优先搜索和广度优先搜索的算法实现、源代码实现等。 图的邻接矩阵和邻接表 在图论中,图可以用邻接矩阵或邻接表来表示。邻接...

    图的深度优先和广度优先搜索动态演示图3张

    图的深度优先搜索(DFS, Depth-First Search)和广度优先搜索(BFS, Breadth-First Search)是图论中的两种基本遍历算法,它们在计算机科学中有着广泛的应用,例如在解决网络爬虫、迷宫求解、社交网络分析等问题时。...

    图的深度优先与广度优先算法

    哈尔滨工业大学计算机科学与技术试验之图的深度与广度优先算法

    图的深度优先和广度优先算法

    图的深度优先搜索(DFS, Depth First Search)和广度优先搜索(BFS, Breadth First Search)是图论中的两种基本搜索算法,用于遍历或搜索树或图。这两种算法在解决各种问题时有着广泛的应用,如寻找最短路径、判断...

    图数据结构以及深度优先和广度优先算法java实现

    深度优先搜索和广度优先搜索在许多问题中都有应用,例如检测图中的环、找到最短路径、查找连通组件等。在Java中,这两种算法的实现都需要考虑效率和空间复杂性,以适应不同的问题需求。通过理解这些概念并熟练使用...

    邻接表表示的图的深度优先搜索和广度优先搜索程序

    这篇文章介绍了使用邻接表表示的图的深度优先搜索和广度优先搜索程序,旨在帮助读者理解图的深度优先搜索和广度优先搜索算法的实现。 首先,文章定义了图的邻接表表示的数据结构,包括顶点结点 vertexnode 和边结点...

    掌握图的两种遍历算法深度优先搜索和广度优先搜索算.doc

    图的遍历是图论中的基础操作,主要包含两种主要的算法:深度优先搜索(Depth-First Search,DFS)和广度优先搜索...在实际编程中,根据问题的具体需求,选择合适的遍历算法和图的存储结构,可以提高算法的效率。

    深度优先和广度优先遍历图算法

    本源文件CPP中代码使用深度优先和广度优先遍历图的算法。

    深度优先、广度优先搜索算法C语言版

    数据结构课程中的深度优先搜索算法、广度优先搜索算法的C语言程序,在Turbo C 2.0上调试通过。

    aa.rar_优先搜索算法_广度搜索算法_深度广度

    了解DFS和BFS的原理和实现至关重要,因为它们是许多高级算法和数据结构的基础,例如拓扑排序、最短路径计算(Dijkstra算法和Bellman-Ford算法)、强连通分量检测等。熟练掌握这两种搜索算法,对于提升编程能力和解决...

    图的深度、广度优先遍历(c语言)

    ### 图的深度、广度优先遍历(C语言) #### 概述 本文将详细介绍如何在C语言中实现图的深度优先遍历(DFS)和广度优先遍历(BFS)。...理解并掌握这两种算法对于学习高级算法和数据结构至关重要。

    深度搜索和广度搜索 C版本

    深度搜索(Depth First Search, DFS)和广度搜索(Breadth First Search, BFS)是图论和树形结构中常用的两种遍历算法,它们在计算机科学中有着广泛的应用,如解决路径查找、拓扑排序、最短路径等问题。本文将详细...

    图的深度优先搜索和广度优先搜索

    在“实验四图的深度优先搜索和广度优先搜索”中,你可以学习如何实现这两种搜索算法,并理解它们之间的差异。通过实践,你将能够熟练掌握这些核心算法,这对于解决复杂问题和优化程序性能至关重要。此外,实验提供的...

    类模板无向图邻接矩阵和深度及广度优先搜索遍历

    在这个主题中,我们将深入探讨如何使用类模板实现无向图的邻接矩阵表示法,以及如何通过深度优先搜索(DFS)和广度优先搜索(BFS)遍历这样的图。 首先,让我们理解邻接矩阵的概念。邻接矩阵是一个二维数组,其中的...

    深度优先及广度优先算法c语言源码

    深度优先及广度优先算法c语言源码,深度优先及广度优先算法c语言源码

Global site tag (gtag.js) - Google Analytics