创建节点并计算汽车的初始位置
Creating nodes and calculating the initial positions of the cars
在这种情况下,如何在C++中创建代码和算法?
- 可以从文件中读取的城市(节点)有限(最多 6 个)。
- 城市之间的连接和距离可以手动分配或从文件中读取。
- 有些汽车的路线可以手动分配,起点是城市(节点)。
问题
- 如何创建节点并分配节点之间的距离?
- 如何在节点之间建立连接?
- 在汽车开始移动一段时间后,我如何计算汽车的初始点?
我尝试了城市之间的连接,例如:
A B C D
A 0 20 0 20
B 20 0 20 20
C 20 20 0 15
D 0 8 9 0
如果 2 个城市之间存在连接,则具有值。否则,值为"0"。谢谢
一种方法是构建连接图。你在这里看到的是相当基本的图形构建。最明显的方法通常是具有与其他节点的连接向量的节点类型:
struct node;
// "name" may be optional here -- just the name of the road like "A5" or "US 101"
struct connection {
std::string name;
unsigned distance;
node *destination;
};
struct node {
std::string name;
std::vector<connection> connections;
};
有了这个,建立一个从一个城镇到另一个城镇的连接就是创建一个connection
对象,其中包含距离、目的地城市和(可能)道路名称,然后将该连接推送到起始城市的connections
向量上。目前,这假设每条connection
都是"简单的"——你走上一条路,直接通往目的地(这听起来足以满足你的需求)。在大多数情况下,您还希望这些连接是对称的,因此当您/如果添加从 X 到 Y 的连接时,您还需要添加从 Y 到 X 的类似连接。
在现实生活中,连接可能需要沿途切换道路,因此您可能有一些无名节点,它们仅表示(例如)高速公路 X 与高速公路 Y 的交汇处(尽管它也可能不是无名的 - "X 和 Y 的交汇处"可能是一个非常好的名称),因此您必须经过多个节点才能从某个点 A 到达某个点 B。
除非您将此作为练习,否则您可能需要查看 Boost 图形库。它不仅有助于构建这样的基本图表,还有助于找到从一个城镇到另一个城镇的路线,即使两者没有直接联系。
就汽车的位置而言,很大程度上取决于您是否只考虑计算特定距离,或者(例如)您是否想要一个成熟的模拟,您可以在其中做一些事情,例如找到从 A 点到 B 点的路线,发现交通量高于特定道路上的某个阈值,如果交通太繁忙,可能会找到替代路线, 等。首先,这是一个基于时间和速度计算距离的简单问题,然后穿过其路线上的节点,直到您走过该距离。对于后者,您可能会添加一个car
类,其中每辆车都知道自己的当前位置和目的地。然后,您将每隔一段时间浏览汽车列表,并让每辆车更新其当前位置(例如,每模拟分钟一次)。
如果你做一些研究,你很快就会发现有很多算法可以在图中查找路线(例如,给定图X,找到从A到B的最短路线),查找是否所有节点都已连接等。
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 如何在特定位置追加 json 文件
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 创建节点并计算汽车的初始位置