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++编程课程,这是我准备这门课程的绝对程度,我觉得我还没有准备好对这个课程的编码。水平。