具体思路 就是根据 与点相连接的 最短的边来产生路径;既 开始从某个特定的顶点出发
具体步骤:
1 首先 生成俩个 数组 ,一个用来存放这个邻接矩阵的权值 一个用来生成 这个点与所有点的需要费用,然后 给 保存这个权值的数组 赋值最开始 的与这个点连接的 邻接 表的 值,然后用循环遍历 这些点中的最小的权值既点的坐标 ,然后以这个坐标为单位继续找出与这个 与这个坐标相连接的 点的最小值,一直找到 最小值为无穷大的时候 由这个点到这个图中所有点的最短路径就生成了;
int pre[n] ;// 用来保存与这个点相连接的最短路径的权值
int p[n][n]; //用来保存这个图的邻接矩阵
void djex(int x, int n) // x为起始点 ,n为顶点的大小
{ int i, j, k, min;
int final[1005];
for (i = 1; i <= n; i++)
{
pre[i] = p[x][i]; //初始化权值的数组 设置为由起始点所到各个点的权值
final[i] = 0; // 初始化标记 此标记用于看看点是否 连接进去
}
pre[x] = 0; //自己到自己权值为0
final[x] = 1; // 已经连接进去 设置为1
for (i = 1; i < n; ++i)
{
min = INF;
k = x;
for (j = 1; j <= n; j++)
if (!final[j] && pre[j] < min) //找出与这个点连接的权值最小的边
{
k = j;
min = pre[j];
}
if (min == INF) // 最小值为无穷 那么 已经没有和他连接的点了 直接退出
break;
final[k] = 1; // 把这个点也标记一下
for (j = 1; j <= n; j++)
if (!final[j] && pre[k] + p[k][j] < pre[j]) // 找出 与刚刚找到的最小的边 相连接的 边 存如权值数组
{
pre[j] = pre[k] + p[k][j];
}
}
printf("%d",pre[n]); // 既输出 从点 x->n 的最短路径
}
}