问题遇到的现象和发生背景 构造了一个计算函数,如何得到最短路径的点的信息以及需要更详细的注释
遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
struct MyStack
{
int stack[50];//栈
int jl;//距离
};
//迪杰斯特拉算法
MyStack Dijkstra(map Map, int d, int e)//d设为起点,e设为终点
{
int stack[50] = { 0 }, id1 = 0;
int stackdata[50] = { 0 }, id2 = 0;
int stackfindlj[50][50] = { 0 }, id3 = 0;//路径保存
int stackfindjl[50] = { 0 };//距离保存
int isfind = 0;
for (int i = d; i < d + 1; i++)
{
for (int j = i; j < 12; j++)
{
int edge[12][12] = { 0 };//辅助地图
if (Map.edge[i][j] != 100 && Map.edge[i][j] != 0 && edge[i][j] == 0)
{
stack[id1++] = j;
stackdata[id2++] = Map.edge[i][j];//边的距离
edge[i][j] = 1;//辅助地图
while (id1)
{
for (int k = stack[id1 - 1]; k < 12; k++)
{
if (Map.edge[stack[id1 - 1]][k] != 100 && Map.edge[stack[id1 - 1]][k] != 0 && edge[stack[id1 - 1]][k] == 0)//开始搜寻路径
{
edge[stack[id1 - 1]][k] = 1;
stackdata[id2++] = Map.edge[stack[id1 - 1]][k];
stack[id1++] = k;
if (k == e)//到达了终点
isfind = 1;
break;
}
if (k == 11)
{
id1--; id2--;
}
}
if (isfind == 1)
{
stackfindlj[id3][0] = i + 1;
for (int k = 0; k < id1; k++)
{
stackfindlj[id3][k + 1] = stack[k] + 1;
stackfindjl[id3] += stackdata[k];
}
id3++;
isfind = 0;
}
}
}
}
}
int min = stackfindjl[0], minidx = 0;
for (int i = 0; i < id3; i++)
{
if (min > stackfindjl[i])
{
min = stackfindjl[i];
minidx = i;
}
}
MyStack temp = { 0 };
memcpy(&temp.stack, &stackfindlj[minidx], sizeof(int) * 50);//将得到的最短路径复制到结构体的数组之中
temp.jl = min;//将得到的最短距离赋值到结构体的距离中
printf("最短路径距离为:%d\n", temp.jl);
return temp;
运行结果及详细报错内容
只会输出最短距离
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
迪杰斯特拉函数