我今天看了一天的这个算法,硬是没有搞明白,好吧,推荐大家看看土豆上边的一个叫 正月点灯笼 的人,讲的很好。
# include <stdio.h>
# define INF 0x7fffffff
# define maxN 50
int matrix[maxN][maxN];
void Dijkstra(int out[], int N, int v0)
{
int i, j;
int visited[maxN] = {0};
int last_visited = 0;
for (i=0; i<N; i++)
out[i] = INF;
visited[v0] = 1;
out[v0] = 0;
for (i=0; i<N-1; i++)
{ //查看周围所有的点
for (j=0; j<N; j++)
{
if (visited[j] == 0)
{
if (matrix[v0][j] != 0)
{
int dist = matrix[v0][j] + last_visited;
if (dist < out[j])
out[j] = dist;
}
}
}
//找出最小值
int minIndex = 0;
while (visited[minIndex] == 1) //找到第一个未被访问的下标
minIndex++;
for (j=minIndex; j<N; j++) //假设第一个是最小的,依次往后遍历,但是不能排除后边的未被访问,所以要加上visited[j] == 0
C语言实现 迪杰斯特拉算法
最新推荐文章于 2022-10-09 15:07:09 发布