[英]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无关,而与处理搜索结果有关,即慢进路径,它是一个顶点列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.