思路:
这个题的核心代码是这个:
for(i=1;i<10;i++){
for(j=i-1;j>=0;j--){
if(a[j][i]+value[j]<value[i]){
value[i]=a[j][i]+value[j];
path[i]=j;}
}
}
i是终点,j是起点,value【i】里面存放的是起点到节点i的最短路径,这个代码块的意义在于一直 求i节点前的所有节点到i节点的最短路径,将求得的最短路径放入value【i】中,path【i】里存放的是i节点的前驱节点
题目:
因为我的那个破编译器在定义变量的时候只有第一行有效,所以我的数组是直接赋值了的,你们的编译器允许的话,还是可以把数组的值改为v的,那样就可以适用于别的有向图了,如:a【10】【10】改为a【v】【v】
代码:
#include<stdio.h>
#define max 100
//v是顶点数 e是边
void shortdistance(int a[10][10]){
//j是起点,i是终点,path【i】存的是i的起点,value【i】存的是从起点到i的