SPFA整体过程

1.用一个队列queue支撑。

2.dis[i]表示目前xi的距离。

3.b[i]表示i是否在q中。

4.清空队列while(q.size()) q.pop();

5.初始化(把所有的dis[i]设为INF,再把dis[x]设为0,因为xx的距离是0)。

6.把当先点入队q.push(x);

7.取出队首,存在temp中,b[队首] = false

8.更新每一个点(dis[j] = min(dis[temp] + mp[temp][j],dis[j]);)。

9.如果它没有在q中则把它入队,并把b[i]标记成true

10.如果队列不空则继续第7步。

code

#include <iostream>
#include <queue>
using namespace std;
#define inf 0x3f3f3f3f
int mp[105][105], dis[105], vis[105], num[105], n, m;
queue<int> q;
void SPFA(int x) {
while(q.size()) q.pop();//4
for (int i = 1; i <= n; i++) {//5
dis[i] = inf;
}
dis[x] = 0;
q.push(x);//6
while (!q.empty()) {
int temp = q.front();//7
q.pop();
for (int j = 1; j <= n; j++) {//8
if (dis[j] > mp[temp][j] + dis[temp]) {
dis[j] = dis[temp] + mp[temp][j];
if (!vis[j]) {//9
q.push(j);
vis[j] = 1;
num[j]++;
}
}
}
vis[temp] = 0;
}//10
}
int main() {
while (cin >> n >> m && n + m) {
int a, b, c;
for (int i = 1; i <= n; i++) {/赋予INF
for (int j = 1; j <= n; j++) {
if (i == j) {、、特判
mp[i][j] = 0;
} else {
mp[i][j] = inf;
}
}
}
for (int i = 1; i <= m; i++) {
cin >> a >> b >> c;
if (mp[a][b] > c) {
//无向图
mp[a][b] = mp[b][a] = c;
//有向图
//mp[a][b] = c;
}
}
SPFA(1);
cout << dis[n] << endl;
}
return 0;
}

完结散花!

最新文章

  1. 高性能 TCP &amp; UDP 通信框架 HP-Socket v3.4.1
  2. frp内网穿透配置
  3. 【java手记】------------------------java中转发和重定向区别
  4. Java:注解(元数据)
  5. FastReport调用Delphi中的人民币大写转换自定义函数
  6. VS2015 建立C++ dll库文件
  7. Silverlight C#动态设置样式
  8. rails3 Bundle简介
  9. 一句代码,更加优雅的调用KVO和通知
  10. Mahout
  11. .Net Memory -- Windbg基本命令
  12. 淘淘商城_day09_课堂笔记
  13. SICP-1.7-递归函数
  14. Nexus5/6刷 lineageos 过程
  15. jquery实现简单的搜索
  16. 南大算法设计与分析课程复习笔记(1) L1 - Model of computation
  17. 面试 15:顺时针从外往里打印数字(剑指 Offer 第 20 题)
  18. linux 下nginx
  19. js如何返回两个数的商的整数和余数部分?
  20. Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again 问题分析

热门文章

  1. python 爬站长素材网页图片
  2. [OpenCV实战]26 基于OpenCV实现选择性搜索算法
  3. Maven项目中导入坐标依赖时报(Failure to transfer....)的错的问题
  4. SpringBoot 项目中配置多个 Jackson 的 ObjectMapper ,以及配置遇到的坑
  5. 洛谷P8567 真&#183;基础数论问题
  6. Dubbo 入门系列之快速部署一个微服务应用
  7. 命令行部署repmgr管理集群+switchover+切换测试
  8. 浅析 SeaweedFS 与 JuiceFS 架构异同
  9. maven打包失败 Cannot create resource output directory
  10. 一段简单的对TXT文件的操作代码