使用图遍历算法的迷宫求解器

时间:2014-02-08 13:10:28

标签: c++ algorithm graph

在我的课堂上,我的作业如下:

在本实验中,您将使用各种图形搜索算法实现迷宫求解器。

实现模板化的Graph数据结构,实现以下功能:

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();

      }
    }
  }
}

请原谅格式,因为我从未使用过这个网站而且我不知道如何正确放置代码块

0 个答案:

没有答案