#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define max_f INFINITY;
struct adj_list {
int v_num;
float len;
struct adj_list* next;
};
typedef struct adj_list NODE;
void dijkstra(NODE node[], int n, int u, float d[], int p[]) {
float temp;
int i, j, t;
bool* s = new bool[n];
NODE* pnode;
for (i = 0; i < n; i++) {
d[i] = max_f;
s[i] = false; p[i] = -1;
}
if (!(pnode = node[u].next))
return;
while (pnode) {
d[pnode->v_num] = pnode->len;
p[pnode->v_num] = u;
pnode = pnode->next;
}
d[u] = 0;
s[u] = true;
for (i = 1; i < n; i++) {
temp = max_f;
t = u;
for (j = 0; j < n; j++)
if (!s[j] && d[j] < temp) {
t = j; temp = d[j];
}
if (t == u) break;
s[t] = true;
pnode = node[t].next;
while (pnode) {
if (!s[pnode->v_num] && d[pnode->v_num] > d[t] + pnode->len) {
d[pnode->v_num] = d[t] + pnode->len;
p[pnode->v_num] = t;
pnode = pnode->next;
}
pnode = pnode->next;
}
}
delete s;
}
int main() {
int n = 10, u = 0;
float d[10];
int p[10];
NODE node[10];
return 0;
}
最短路径狄斯奎诺算法
于 2024-04-16 11:26:04 首次发布