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

完结散花!

hdu-2544 最短路(SPFA)的更多相关文章

  1. hdu 2544 最短路 (spfa)

    最短路 Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

  2. HDU 2544 最短路 SPFA 邻接表 模板

    Problem Description 在每年的校赛里,全部进入决赛的同学都会获得一件非常美丽的t-shirt.可是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以如今他们想 ...

  3. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  4. UESTC 30 &&HDU 2544最短路【Floyd求解裸题】

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  5. HDU - 2544最短路 (dijkstra算法)

    HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...

  6. hdu 2544 最短路

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shi ...

  7. HDU 2544最短路 (迪杰斯特拉算法)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Time Limit: 5000/1000 MS (Java/Others)    Me ...

  8. (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。

    floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...

  9. HDU 2544 最短路(floyd+bellman-ford+spfa+dijkstra队列优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目大意:找点1到点n的最短路(无向图) 练一下最短路... dijkstra+队列优化: #i ...

  10. HDU 2544 最短路(初涉SPFA算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t ...

随机推荐

  1. ClickHouse MergeTree引擎

    Clickhouse 中最强大的表引擎当属 MergeTree (合并树)引擎及该系列(*MergeTree)中的其他引擎. MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中.数据 ...

  2. java反射基础知识整理

    目录 1.反射机制的作用 2.获取一个类的实例 3.使用Class.forName()方法加载类的静态代码块 4.获取配置文件的路径 5.java反编译 5.1.获取类中的成员变量 5.2.通过类名反 ...

  3. Kaliの一些网络操作

    KAlIの一些网络操作 arping -c 192.168.10.1 缺点是只能对单一ip进行探测,可利用shell脚本进行网段探测扫描 netdiscover -i eth0 -r 192.168. ...

  4. Runloop的使用

    系统为我们提供了多种模式,下面列一些比较常遇到的: kCFRunLoopDefaultMode: App的默认 Mode,通常主线程是在这个 Mode 下运行的. UITrackingRunLoopM ...

  5. 關於scanf()的使用

    要使用scanf函數進行輸入: 1.如果用scanf()要輸入讀取基本變量的值,需要加&. 2.如果用scanf()讀取的是把字符串讀入字符數組中,則不需要加& 1 #include& ...

  6. 送给vue初学者的 vue.js技巧

    1.setTimeout/ setInterval 场景一 :this指向改变无法用this访问vue实例 mounted(){ setTimeout( function () { //setInte ...

  7. js函数中的this指向

    写代码的时候遇到这个问题了,在这里复习一下 非箭头函数 非箭头函数的this指向比较好理解,就是调用这个函数的对象,举个栗子: var obj = { foo: { bar: 3, foo:{ bar ...

  8. spring-in-action-day05-REST

    1.创建RESTFUL端点 (1)创建get端点 (2)创建post端点 (3)创建put/patch端点 (4)创建delete端点 2.启用超媒体 3.消费REST端点 3.1使用RestTemp ...

  9. 免费的在线PS工具

    免费的在线PS工具:https://www.logosc.cn/online-ps

  10. P30_全局配置 - window - 下拉刷新

    window 全局开启下拉刷新功能 概念:下拉刷新是移动端的专有名词,指的是通过手指在屏幕上的下拉滑动操作,从而重新加载页面数据的行为. 设置步骤:app.json -> window -> ...