Dijkstra算法找到两个顶点之间的最短距离c ++

时间:2017-02-22 02:51:17

标签: c++ arrays algorithm class

我一直致力于一个程序,以获得有关路径查找工作原理的一些基本知识,并决定使用Dijkstra算法来找到用户选择的2D阵列的两个点之间的最短距离。我使用了一个Graph类,它有三个方法,一个用于读取,打印和最短。但是我不知道如何为我所制作的程序制作算法。任何帮助将不胜感激!

程序读入这些值,第一个值被设置为一个名为size的变量,其余的被输入到名为distance的2D数组中。

4
0     1.7   0.3   0 
1.7   0     0.1   3.6 
0.3   0.1   0     0 
0     3.6   0     0

这是我的Graph.h文件:

class Graph
{
 public:
  void read(const char* filename);
  void print(ostream& out);
  float shortest(int v1, int v2);
 private:
  int size;
  float max_edge_length;
  float distance[MAX_VERTICES][MAX_VERTICES];
};

以下是我创建阅读和打印方法的开始。

void Graph::read(const char* filename){
    int x, y;
    ifstream myfile(filename);

    if (myfile.good()){
        myfile >> size;
        for (y = 0; y < size; y++){
            for (x = 0; x < size; x++){
                myfile >> distance[x][y];
            }
        }
    }
} 

void Graph::print(ostream& out){

    out << size << endl;
    for (int y = 0; y < size; y++){
        for (int x = 0; x < size; x++){
            out << distance[x][y] << " ";
        }   
        out << endl;
    }
}

float Graph::shortest(int v1, int v2){


}

1 个答案:

答案 0 :(得分:0)

如果您的图表在从文件中读取后确定并且通常使用最短的图标。

你可以使用Floyd的算法。它比Dijkstra简单

取O(n ^ 3)(n是你的图形点数)构建一次并查询最短每个时间使用O(1)

https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm

但是如果你的图表的点数很大(比如100000)。二维数组在商店图上并不擅长。它将花费100000 * 100000 * sizeof(浮动)内存

你可以存储图表