繁体   English   中英

在C ++图形中使用深度优先搜索

[英]Using Depth-First Search in c++ graph

我有一个包含交叉路口(ID安全名称)和街道(Intersection1 Intersection2距离)的数据文件,如下所示:

INTERSECTIONS:
198 0.8 alvemon and 28th
199 0.6 alvemon and 29th
200 0.8 alvemon and 30th

STREETS:
1   2   0.6
2   3   0.1
3   4   0.9

相交是顶点,街道是边缘。 这是我的标头:顶点标头:

#ifndef VERTEX_H
#define VERTEX_H
#include<list>
#include<string>
#include "global.h"

struct Vertex_{
int xsect;
double danger;
std::string xstreets;

std::list<Edge> EdgeList;
/*struct Vertex_ *next;
struct Vertex_ *prev;*/
};

#endif

边头:

#ifndef EDGE_H
#define EDGE_H

#include "global.h"
#include "vertex.h"
struct Edge_{
Vertex *adjvertex;
double distance;

/*struct edge *next;
struct edge *prev;*/
};

#endif

我正在从列表中绘制图表。 我已经完成了所有设置,并绘制了街道/十字路口的图形(或地图)。 我知道由于以下要求,我需要使用深度优先搜索,但不确定如何实现。 如果有人可以给我一个深度优先搜索的示例,那就太好了。 现在我的任务需要我:

缓跑径要求

safejogger程序应搜索提供的图形,以找到满足以下要求的慢跑路径:该路径必须在用户指定的startingIntersection指示的同一交点(即顶点)处开始和结束。 该路径不应重访任何交叉路口。 换句话说,路径中的任何顶点都不应出现两次。 路径的总距离应在用户指定的距离目标的1英里内。

缓跑径安全

safejogger程序应为慢跑路径计算两个统计数据,包括:平均路径安全性:慢跑路径内所有交叉路口的平均安全指数。 最小路径安全性:缓跑路径内所有路口的最小安全性指数。

如果要在图上实现DFS,则需要一种方法来标记已经访问过的顶点。 您可以更改您的顶点结构以包括一个标志,或者具有一个单独的位向量来将所有标志重新组合在一起。

对于DFS算法,这非常简单:

  • 您标记开始的顶点,
  • 你跟随每个边缘离开它,
  • 如果尚未标记末端顶点,则以递归方式运行DFS算法。

那是基线。 您可以使用堆栈将该算法转换为循环(而不是递归)。

在分配作业时,您将必须在DFS的每个步骤中执行一些操作,因此您需要弄清楚如何执行这些额外的操作。 提示:制作一个在图上执行DFS的类,并派生该类以实现多余的东西。

问题的第二部分与DFS无关,而与处理搜索结果有关,即慢进路径,它是一个顶点列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM