#include <stdio.h>
#include <stdlib.h>
#define MAX 9999
#define U 9999
#define N 6
void Dijkstra(int s, int v, int (*map)[6]) {
int d[N];
int visit[N];
int prev[N];
int i;
for(i=0;i<N;i++) {
d[i]=(*map+s)[i];
printf("Out from %d val is %d\n", i, d[i]);
visit[i] = 0;
prev[i]=0;
}
visit[s]=1;
for (;;) {
int j;
int min=MAX;
int pos = -1;
for (j=0;j<N;j++) {
if (visit[j] == 0 && d[j]<min) {
min = d[j];
pos=j;
}
}
if (pos == -1) {
break;
}
printf("Smallest is d[%d]=%d\n", pos, d[pos]);
visit[pos]=1;
for(j=0;j<N;j++) {
int newd = (*map+pos)[j];
printf("Before newD is %d\n", newd);
if (newd !=0 && newd != U && j != prev[pos]) {
newd += min;
printf("newD is %d\n", newd);
d[j] = (newd < d[j])?newd:d[j];
prev[j]=pos;
}
}
printf("End Smallest\n\n");
}
for(i=0;i<N;i++) {
printf("v=%d d=%d prev=%d\n", visit[i], d[i], prev[i]);
}
}
void main() {
int s=3;
int v=6;
int map[6][6] = {
// A B C D E F
{0,6,3,U,U,U},//A
{6,0,2,5,U,U},//B
{3,2,0,3,4,U},//C
{U,5,3,0,2,3},//D
{U,U,4,2,0,5},//E
{U,U,U,3,5,0},//F
};
Dijkstra(0,v,map);
}
Dijkstra 算法
最新推荐文章于 2024-08-19 12:02:02 发布