最短路径狄斯奎诺算法

#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;
}

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值