创建节点并计算汽车的初始位置

时间:2013-01-26 14:30:51

标签: c++ c++11

如何在这种情况下用C ++创建代码和算法?

  1. 可以从文件中读取有限(最多6个)城市(节点)。
  2. 城市之间的连接和距离可以手动分配或从文件中读取。
  3. 有车辆可以手动分配路线,起点是城市(节点)。
  4. 问题,

    1. 如何创建节点并在节点之间分配距离?
    2. 如何在节点之间建立连接?
    3. 如何在汽车开始移动后计算汽车的初始点?
    4. 我试过像城市之间的联系:

          A   B   C   D   
      A   0  20   0  20  
      B  20   0  20  20  
      C  20  20   0  15
      D  0    8   9  0
      

      如果两个城市之间存在连接,则它具有值。如果不是,则值为“0”。 谢谢,

1 个答案:

答案 0 :(得分: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对象来保持距离,目的地城市和(可能)道路的名称,然后将该连接推送到{ {1}}起始城市的向量。目前,这假设每个connections都是“简单” - 您可以在一条路上行驶,直接到达目的地(听起来它足以满足您的需求)。在大多数情况下,您还希望它们是对称的,因此当/如果您添加从X到Y的连接时,您还需要添加从Y到X的类似连接。

在现实生活中,连接可能需要沿途切换道路,因此您可能会有一些无名的节点,它们只代表(例如)高速公路X与高速公路Y的交汇点(尽管它可能也不是无名的 - “X和Y的交汇点”可能是一个非常好的名字)所以你必须通过几个节点才能从某个点A到达某个点B.

除非您将此作为练习,否则您可能需要查看Boost Graph Library。它不仅有助于构建这样的基本图形,而且还有助于找到从一个城镇到另一个城镇的路线,即使两者没有直接连接。

就汽车的位置而言,很大程度上取决于你是在考虑计算一个特定的距离,还是(例如)你想要一个完整的模拟,你可以做一些事情,比如从点A到点B,发现特定道路上的交通量高于某个阈值,如果交通量太重,可能会找到备用路线等。首先,根据时间和速度计算距离,然后走路就是一件简单的事情。通过他们路线上的节点,直到你走过那段距离。对于后者,您可能会添加connection类,其中每辆车都知道自己当前的位置和目的地。然后,您可以按时间间隔浏览汽车列表,并更新每个汽车的当前位置(例如,每个模拟分钟一次)。

如果你做了一些研究,你很快就会发现有相当多的算法用于在图表中查找路线(例如,给定图表X,找到从A到B的最短路线),查找是否所有节点连接等