How to optimize Dijkstra algorithm for a single shortest path between 2 nodes?

前端 未结 3 728
轮回少年
轮回少年 2020-12-18 07:23

I was trying to understand this implementation in C of the Dijkstra algorithm and at the same time modify it so that only the shortest path between 2 specific nodes (source

3条回答
  •  [愿得一人]
    2020-12-18 08:28

    The implementation in your question uses a adjacent matrix, which leads O(n^2) implementation. Considering that the graphs in the real world are usually sparse, i.e. the number of nodes n is usually very big, however, the number of edges is far less from n^2.

    You'd better look at a heap-based dijkstra implementation.

    BTW, single pair shortest path cannot be solved faster than shortest path from a specific node.

    #include
    using namespace std;
    
    #define MAXN 100
    #define HEAP_SIZE 100
    typedef int Graph[MAXN][MAXN];
    
    template 
    class Heap
    {
    public:
        int data[HEAP_SIZE],index[HEAP_SIZE],size;
        COST_TYPE cost[HEAP_SIZE];
        void shift_up(int i)
        {
            int j;
            while(i>0)
            {
                j=(i-1)/2;
                if(cost[data[i]] heap;
        heap.init();
        heap.push(s,0);
        while(!heap.empty())
        {
            int u=heap.pop();
            if(u==t)
                return heap.cost[t];
            for(int i=0;i=0)
                    heap.push(i,heap.cost[u]+G[u][i]);
        }
        return -1;
    }
    

提交回复
热议问题