我一直致力于一个程序,以获得有关路径查找工作原理的一些基本知识,并决定使用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){
}
答案 0 :(得分:0)
如果您的图表在从文件中读取后确定并且通常使用最短的图标。
你可以使用Floyd的算法。它比Dijkstra简单
取O(n ^ 3)(n是你的图形点数)构建一次并查询最短每个时间使用O(1)
https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm
但是如果你的图表的点数很大(比如100000)。二维数组在商店图上并不擅长。它将花费100000 * 100000 * sizeof(浮动)内存
你可以存储图表