博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ccf算法模板
阅读量:6496 次
发布时间:2019-06-24

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

bellman ford 算法求最短路径

1 #include 
2 using namespace std; 3 const int maxnum = 100; 4 const int maxint = 99999; 5 6 // 边, 7 typedef struct Edge{ 8 int u, v; // 起点,重点 9 int weight; // 边的权值10 }Edge;11 12 Edge edge[maxnum]; // 保存边的值13 int dist[maxnum]; // 结点到源点最小距离14 15 int nodenum, edgenum, source; // 结点数,边数,源点16 17 // 初始化图18 void init()19 {20 // 输入结点数,边数,源点21 cin >> nodenum >> edgenum >> source;22 for (int i = 1; i <= nodenum; ++i)23 dist[i] = maxint;24 dist[source] = 0;25 for (int i = 1; i <= edgenum; ++i)26 {27 cin >> edge[i].u >> edge[i].v >> edge[i].weight;28 if (edge[i].u == source) //注意这里设置初始情况29 dist[edge[i].v] = edge[i].weight;30 }31 }32 33 // 松弛计算34 void relax(int u, int v, int weight)35 {36 if (dist[v] > dist[u] + weight)37 dist[v] = dist[u] + weight;38 }39 40 bool Bellman_Ford()41 {42 for (int i = 1; i <= nodenum - 1; ++i)43 for (int j = 1; j <= edgenum; ++j)44 relax(edge[j].u, edge[j].v, edge[j].weight);45 bool flag = 1;46 // 判断是否有负环路47 for (int i = 1; i <= edgenum; ++i)48 if (dist[edge[i].v] > dist[edge[i].u] + edge[i].weight)49 {50 flag = 0;51 break;52 }53 return flag;54 }55 int main()56 {57 //freopen("input3.txt", "r", stdin);58 init();59 if (Bellman_Ford())60 for (int i = 1; i <= nodenum; i++)61 cout << dist[i] << endl;62 return 0;63 }

 

转载于:https://www.cnblogs.com/susuguo/p/5202046.html

你可能感兴趣的文章
《跟菜鸟学Cisco UC部署实战》-第 1 章 规划-课件(一共12章,免费)
查看>>
Forefront_TMG_2010-TMG发布Web服务器
查看>>
精品德国软件 UltraShredder 文件粉碎机
查看>>
常回“家”看看
查看>>
.NET工程师必须掌握的知识点
查看>>
PHP设计模式(4)命令链模式
查看>>
Palo Alto 防火墙升级 Software
查看>>
nf_conntrack: table full, dropping packet
查看>>
关于C语言结构体对齐的学习
查看>>
loadrunner另类玩法【测试帮日记公开课】
查看>>
C#删除文件夹
查看>>
【ZooKeeper Notes 3】ZooKeeper Java API 使用样例
查看>>
oracle11g数据库升级
查看>>
AWS - Couldformation 初探
查看>>
《理解 OpenStack + Ceph》---来自-[爱.知识]-推荐
查看>>
手把手教你搭建一个学习Python好看的 Jupyter 环境
查看>>
ES6基础之Array.fill函数
查看>>
ES6深拷贝与浅拷贝
查看>>
如何免费(轻成本)在网上做推广宣传
查看>>
Exchange 2013与OWA13集成
查看>>