算法课的一道作业题:
给定一个有向图,求v1到其他各节点的最短路径长度,以及最短路径。
要求:对dijkstra算法进行补充,使新算法在找出这些最短路径长度的同时,也能求出路径上的节点序列。
输入:一个有向带权图
输出的基本形式如下:
基本思路:
使用dijkstra计算v1节点到其他所有节点的路径长度:
二维数组cost[][]:存放有向带权图的初试状态;
一维数组s[]:bool类型,标记节点是否被选取;
一维数组dist[]:存放此轮迭代的最短路径,最后一轮迭代后,即为最终结果。
dist[i]=min{dist[i],dist[j]+cost[j][i]}
对于路径到的节点序列,新建一个path[]数组,每次更新路径长度时,更新path数组。
新的path[i]=path[j]+”vi”
//第一遍看代码的时候 可以忽略所有带有path的行,只看路径长度算法
//第二遍再看带有path的行,得到路径上的节点序列
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <stdlib.h>
using namespace std;
void shortest_path(int n,int cost[101][101]){