运用数据结构的知识,用c++写一个校园导游系统
时间: 2024-01-03 07:02:55 浏览: 30
好的,校园导游系统可以使用图这种数据结构来实现。我们可以将校园中的建筑物和道路看作图中的节点和边,然后使用图的遍历算法来实现路径规划功能。以下是一个简单的校园导游系统的c++实现。
```c++
#include<iostream>
#include<vector>
#include<queue>
#include<map>
#include<stack>
using namespace std;
//图的节点类
class Node {
public:
string name; //建筑物名称
int id; //节点编号
vector<Node*> neighbors; //相邻节点
Node(string name, int id) {
this->name = name;
this->id = id;
}
};
//图类
class Graph {
public:
vector<Node*> nodes; //所有节点
void addNode(string name, int id) {
nodes.push_back(new Node(name, id));
}
void addEdge(int from, int to) {
nodes[from]->neighbors.push_back(nodes[to]);
nodes[to]->neighbors.push_back(nodes[from]);
}
};
//广度优先遍历
void BFS(Node* start, Node* end) {
map<Node*, Node*> visited; //记录已访问节点的路径
queue<Node*> q;
q.push(start);
visited[start] = nullptr;
while (!q.empty()) {
Node* cur = q.front();
q.pop();
if (cur == end) {
//输出路径
stack<Node*> path;
while (cur) {
path.push(cur);
cur = visited[cur];
}
while (!path.empty()) {
cout << path.top()->name << " ";
path.pop();
}
cout << endl;
return;
}
for (Node* next : cur->neighbors) {
if (!visited.count(next)) {
visited[next] = cur;
q.push(next);
}
}
}
cout << "No path found!" << endl;
}
int main() {
//初始化图
Graph g;
g.addNode("教学楼", 0);
g.addNode("图书馆", 1);
g.addNode("食堂", 2);
g.addNode("体育馆", 3);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 3);
g.addEdge(2, 3);
//路径规划
Node* start = g.nodes[0];
Node* end = g.nodes[3];
BFS(start, end);
return 0;
}
```
上述代码中,我们定义了一个节点类和一个图类,用来表示校园中的建筑物和道路。我们使用邻接表来存储图的信息。在主函数中,我们创建了一个简单的校园图,并使用广度优先搜索算法来实现路径规划。