博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bellman Ford 的队列优化 (2) C~
阅读量:4216 次
发布时间:2019-05-26

本文共 1547 字,大约阅读时间需要 5 分钟。

此实现利用两个数组first[],  ext[] 邻接表。

核心代码:

void bellman_ford(int orig)	{		int k;		que[tail++] = orig;		book[orig] = 1;		while(head < tail){			k = first[que[head]];			while(k != -1){				if(dist[edge[k].v] > dist[edge[k].u] + edge[k].w){					dist[edge[k].v] = dist[edge[k].u] + edge[k].w;									if(book[edge[k].v] == 0){					que[tail++] = edge[k].v;					book[edge[k].v] = 1;					}									}				k = next[k];			}			book[que[head]] = 0;			head++;		}	}
完整实现:
#include
#define INF 65535#define MAX 20typedef struct Edge{ int u, v; int w;}Edge;int que[MAX] = {0};int head = 1, tail = 1;int next[MAX+1], first[MAX+1];int book[MAX];int dist[MAX];Edge edge[MAX];void bellman_ford(int orig) { int k; que[tail++] = orig; book[orig] = 1; while(head < tail){//队列不空 就继续 k = first[que[head]];//获取 当前顶点的 ’边‘ 的 序号 while(k != -1){ if(dist[edge[k].v] > dist[edge[k].u] + edge[k].w){ dist[edge[k].v] = dist[edge[k].u] + edge[k].w; if(book[edge[k].v] == 0){ que[tail++] = edge[k].v; book[edge[k].v] = 1;//入队后 标记 } } k = next[k]; } book[que[head]] = 0;// 出队 重新把标记置 0 意味着 可以重新 入队 head++; } }int main() { int n, m; scanf("%d%d",&n,&m); for(int i = 1; i <= n; i++ ){//初始化 book[i] = 0; first[i] = -1; next[i] = -1; dist[i] = INF; } int orig = 1; dist[orig] = 0; for(int j = 1; j <= m; j++ ){ scanf("%d%d%d", &edge[j].u,&edge[j].v, &edge[j].w); //下面两句用数组模拟链表 next[j] = first[edge[j].u]; first[edge[j].u] = j; } bellman_ford(orig); for(int i = 1; i <= n; i++ ){ printf("%d ",dist[i]); } }

转载地址:http://baimi.baihongyu.com/

你可能感兴趣的文章
初识软件定义汽车
查看>>
科普 | 自动驾驶预期功能安全(二)
查看>>
轩辕实验室丨SAE J3061汽车信息安全标准解读
查看>>
轩辕实验室丨欧盟EVITA项目预研 第一章(一)
查看>>
轩辕实验室丨欧盟EVITA项目预研 第一章(二)
查看>>
轩辕实验室丨欧盟EVITA项目预研 第一章(三)
查看>>
专利 | 一种基于深度学习的车载CAN总线入侵检测方法
查看>>
VCU解决方案及核心L9788复杂驱动功能安全审计启动
查看>>
助力“探月工程”的单元测试工具可10倍提升测试效率
查看>>
构建实时数仓 - 当 TiDB 偶遇 Pravega
查看>>
TiDB 容器化部署面面观丨「能量钛」圆桌论坛回顾
查看>>
TiDB 在网易游戏的应用实践
查看>>
迁移实战:Discourse 从 PostgreSQL 到 MySQL 到 TiDB丨AskTUG 论坛背后的故事
查看>>
TiDB Operator 源码阅读 (四) 组件的控制循环
查看>>
TiDB 5.1 发版,打造更流畅的企业级数据库体验
查看>>
2020-11-04
查看>>
OC笔记NSDate
查看>>
求两个分数的加减乘除,并比较大小
查看>>
day1: Objective-C概述、面向对象编程、类和对象、实例变量操作
查看>>
day2:实例变量可见度、方法、setter、getter
查看>>