问题遇到的现象和发生背景
利用迪杰斯特拉方法求最短路径
遇到的现象和发生背景,请写出第一个错误信息
代码中有错误 但是没有报错
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
> #include<stdio.h>
#include<math.h>
#include<string.h>
#include <stdlib.h>
#define unreach 100 //没有途径的点之间的距离
struct map {
int edge[12][12];//储存距离
int S[12];//储存点的信息
int edgenum;//边的个数
}Map;
//输入路径图的信息
map Creatmap(int m) {
const char* path = "C:\\Users\\tyl666\\题目5-最短路径规划\\路径文件.txt";
FILE* fp = NULL;
fopen_s(&fp, "path", "r");
int a, b, c;//点点边
//初始化点点距
for (int i = 0;i < 12;i++) {
for (int j = 0;j < 12;j++) {
if (i == j) {
Map.edge[i][j] = 0;
}
else {
Map.edge[i][j] = unreach;
}
}
}
//从文件中读取点与点之间的距离
for (int i = 0;i < 21;i++)
{
fscanf_s(fp, "%d,%d,%d", &a, &b, &c);
Map.edge[a][b] = c;
Map.edge[b][a] = c;
}
fclose(fp);
return Map;
}
//迪杰斯特拉算法
void Dijkstra(map Map, int d, int m)//d设为起点
{
int i, j, n;
d = 1;
//利用动态数组
int* dist=new int[12];//储存当前最短路径的长度
char* path=new char[12];//储存最短路径
for (i = 0;i < 12;i++) {
dist[i] = Map.edge[d][i];
path[i] = Map.S[d] + Map.S[i];
}
//开始遍历路径图
for (n = 1;n < 12;n++) {
for (i = 0, j = 0;i < 12;i++) {
if (dist[i] != 0&&dist[i]<dist[j]) {
j = i;
}
}
printf("%d %d", dist[i],path[j]);
//逐步寻找到最短路径及其距离
for (i = 0;i < 12;i++) {
if (dist[i] > dist[j] + Map.edge[j][i]) {
dist[i] = dist[j] + Map.edge[j][i];
path[i] = path[j] + Map.S[i];
}
}
dist[j] = 0;
}
}
int main()
{
int a = 21;
int m = 1;
Map = Creatmap(a);
Dijkstra(Map, m, a);
return 0;
}
运行结果及详细报错内容
出现了debug警告
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
读取文件数据写入了地图数据,构造函数求最短路径
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
得到最短路径和距离