计算下一条最短路径(到目的地的最小跳数)

时间:2014-04-28 06:32:55

标签: c++ dijkstra omnet++

这里是使用omnet使用Dijkstra计算最短路径(跳跃)的结构。

void cTopology::calculateUnweightedSingleShortestPathsTo(Node * _target) {
    // multiple paths not supported :-(
    if (!_target) throw cRuntimeError(this, "..ShortestPathTo(): target node is NULL");
    target = _target;
    for (int i = 0; i < num_nodes; i++) {
        nodev[i].known = false; // not really needed for unweighted
        nodev[i].dist = INFINITY;
        nodev[i].out_path = NULL;
    }
    target - > dist = 0;
    std::deque < Node * > q;
    q.push_back(target);
    while (!q.empty()) {
        Node * v = q.front();
        q.pop_front();
        // for each w adjacent to v...
        for (int i = 0; i < v - > num_in_links; i++) {
            if (!(v - > in_links[i] - > enabl)) continue;
            Node * w = v - > in_links[i] - > src_node;
            if (!w - > enabl) continue;
            if (w - > dist == INFINITY) {
                w - > dist = v - > dist + 1;
                w - > out_path = v - > in_links[i];
                q.push_back(w);
            }
        }
    }
}

我想找到并记录下一个最短的跳。任何人都可以帮我解决这个问题吗?理论上,我需要创建一个新的结构来计算最短路径而没有先前选择的下一个节点吗?谢谢

1 个答案:

答案 0 :(得分:0)

让它更容易..
你可以用...

parent[]
存储数据/ id'回合前一个节点..

然后获取路径,你只需要反转它..

parent[parent[parent[goal]] -> parent[parent[goal] -> parent[goal]

代码,你可以在这里看到......

http://pastebin.com/YUBicFjy