在我的课堂上,我的作业如下:
在本实验中,您将使用各种图形搜索算法实现迷宫求解器。
实现模板化的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();
}
}
}
}
请原谅格式,因为我从未使用过这个网站而且我不知道如何正确放置代码块