C++ 基于图遍历算法的迷宫求解器
在我的课堂上,我有一个作业指导如下: 在本实验室中,您将使用各种图形搜索算法实现迷宫解算器 实现模板化图形数据结构,实现以下功能:C++ 基于图遍历算法的迷宫求解器,c++,algorithm,graph,C++,Algorithm,Graph,在我的课堂上,我有一个作业指导如下: 在本实验室中,您将使用各种图形搜索算法实现迷宫解算器 实现模板化图形数据结构,实现以下功能: Add Node Add Adjacency (given node, and adjacent node) Breadth-First Search Depth-First Search Dijkstra’s Shortest Path Algorithm 要评估此数据结构,请编写一个程序,读取数据文件(文件名作为命令行参数传递)并填充数据结构 文档共享中将提供
Add Node
Add Adjacency (given node, and adjacent node)
Breadth-First Search
Depth-First Search
Dijkstra’s Shortest Path Algorithm
要评估此数据结构,请编写一个程序,读取数据文件(文件名作为命令行参数传递)并填充数据结构
文档共享中将提供一套迷宫。
迷宫数据格式
迷宫数据文件将是包含整数的文本文件。
第一行给出迷宫的大小,以“单元格”为单位,先是x,然后是y,用空格隔开
第二行给出迷宫“起点”的坐标(x,然后y,用空格分隔)
第三行给出迷宫“末端”的坐标(x,然后y,用空格分隔)
文件的其余部分是迷宫大小的数字网格,空格分隔,每个数字代表一个“开放”(0)或“封闭”(1)单元格。您的“玩家”可以移动到开放单元格,但不能移动到封闭单元格
对于提供的各种迷宫,评估每个算法的执行时间和最终路径长度(打开以查找路径的节点数)。根据数据集大小(迷宫中的单元总数)记录此数据
首先,我甚至不知道如何首先实现一个图。我能找到的所有参考资料都只是告诉我什么是图,而不是如何开始编码它。我是否像在链表或树中一样创建一个类或结构?我不知道我应该做什么
以下是我到目前为止的情况:
#include <list>
#include <map>
#include <queue>
template <typename T>
class Graph
{
T V; //vertices
list<T> *adj; //edges;
public:
Graph(T V); //constructor
void addEdge(T v, T w); //function to add an edge to the graph
void BFS(T s); //prints the bfs traversal
};
Graph(T V)
{
this->V = V;
adj = new list<T>[V];
}
void Graph::addEdge(T v, T w)
{
adj[v].push_back(w); //Add w to v's list
}
void Graph::BFS(T s)
{
//Mark all the vertices as not visited
bool *visited = new bool[V];
for (int i - 0; i<V; i++)
visited[i] = false;
// create a queue for BFS
list<int>queue;
//Mark the current node as visited and enque it
visited[s] = true;
queue.push_back(s);
//i will be used to get all adjacent vertices of a vertex
list<T>::iterator i;
while (!queue.empty())
{
//deque a vertex from queue and print it
s = queue.front();
cout << s << " ";
queue.pop_front();
for (i = adj[s].begin(); i != adj[s].end(); i++)
{
if (!visited[*i])
{
visited[*i] = true;
queue.push_back();
}
}
}
}
#包括
#包括
#包括
模板
类图
{
tV;//顶点
list*adj;//边;
公众:
图(tv);//构造函数
void addEdge(tv,tw);//向图形添加边的函数
void BFS(ts);//打印BFS遍历
};
图(tV)
{
这个->V=V;
adj=新列表[V];
}
无效图::添加(tV,tW)
{
adj[v]。推回(w);//将w添加到v的列表中
}
空图::BFS(ts)
{
//将所有顶点标记为未访问
bool*visted=新bool[V];
对于(int i-0;iGoogle for无向图实现c++
给了我(链接数据结构)和(邻接列表/矩阵)。这些是常见的实现(第一个更简单,另外两个由于空间位置的原因,性能更高。你知道如何实现链表或树吗?你熟悉像std::vector
和std::list
这样的STL容器吗?@Beta我以前在学校作业中实现过链表和树。我确实认为我对树和链表有相当好的掌握。我去了一个辅导网站,得到了一些帮助,但这还不够,我没有钱继续辅导。你“到目前为止”有什么不编译,并且看起来非常混乱。如果你编写大量代码,尝试新事物,然后尝试运行它,你肯定会失败;你必须从小而简单开始,然后构建,每一步都进行测试。这正是导师向我展示的,我认为我已经理解了发生的事情,但显然我错了。网上学校没有我参加的课程有5周的课程,所以对于这个初中/高中的数据结构和算法课,我已经修了1个5周的微积分课程和2个5周的C++编程课程,这是我准备这门课程的绝对程度,我觉得我还没有准备好对这个课程的编码。水平。