Dijkstra 算法在 C++ 中使用矩阵。这段代码出了什么问题?
dijkstra's algorithm using matrix in c++. what's wrong in this code?
#include <iostream>
int n, m, v1, v2, weight;
cin >> n >> m;
int** graph = new int*[n];
int* distance = new int[n];
int* s = new int[n];
for (int i = 0; i < n; ++i)
graph[i] = new int[n];
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
graph[i][j] = INT_MAX;
for (int i = 0; i < m; ++i)
{
cin >> v1 >> v2 >> weight;
graph[v1][v2] = weight;
graph[v2][v1] = weight;
}
for (int i = 0; i < n; ++i)
distance[i] = INT_MAX;
for (int i = 0; i < n; ++i)
distance[i] = graph[0][i];
for (int i = 0; i < n; ++i)
s[i] = 0;
distance[0] = 0;
int min = INT_MAX;
int vertex = 0;
for (int j = 0; j < n-1; ++j){
min = INT_MAX;
for (int i = 0; i < n; ++i)
if (s[i] == 0 && min >= distance[i])
{
vertex = i;
min = distance[i];
}
s[vertex] = 1;
cout << vertex << " ";
for (int i = 0; i < n; ++i)
if (distance[i]>distance[vertex] + graph[vertex][i])
distance[i] = distance[vertex] + graph[vertex][i];
}
for (int i = 0; i < n; ++i)
cout << distance[i] << " ";
cout << endl;
return 0;
}
你好。我正在使用二维矩阵制作Dijkstra的算法。但是此代码不起作用。我不知道为什么! 你能解决我的问题吗?我想输出图形的所有距离。但是输出看起来像数组点垃圾值,例如 -2345...你可以帮我吗??
此循环中存在一些问题:
for (int i = 0; i < n; ++i)
if (distance[i]>distance[vertex] + graph[vertex][i])
distance[i] = distance[vertex] + graph[vertex][i];
应该更改为 BEW 代码:
for (int i = 0; i < n; ++i)
if (s[i] == 0 && graph[vertex][i] != INT_MAX && distance[i]>distance[vertex] + graph[vertex][i])
distance[i] = distance[vertex] + graph[vertex][i];
因为如果graph[vertex][i] == INT_MAX
,distance[vertex] + graph[vertex][i]
之和是溢出的。另一个问题是顶点 i 之前不应该被标记。
相关文章:
- 在黑客地球上没有获得以下C ++代码问题的输出
- VS 代码C++问题
- 插入操作的二叉搜索树代码问题
- 如何在代码问题中解决此问题 代码强制
- 发送和十六进制消息时套接字代码C++问题
- 代码问题将字符串转换为图表执行
- C 代码问题?编译器问题?代码块
- 代码问题.使用矢量删除相同的数字,除了它的最后一个入口
- 迭代列表以查找元素的出现.代码问题
- 使用JNI从Java调用本机(C++)函数时发生访问冲突:这是我的代码问题,还是已知问题
- XCode 4.5简单的OpenGL C 代码问题
- 在VS 2010上使用boost::interprocess生成代码问题
- 简单代码问题-未定义标识符
- 基本的c++代码问题
- 识别C++代码问题
- C++角色战斗代码问题
- OpenScenegraph 示例代码问题
- PortAudio示例代码问题
- 关于cout和cin的c++简单代码问题
- 关于歧义排列的代码问题