题目链接:https://cn.vjudge.net/contest/66569#problem/A

代码:

vis数组代表是否还有用,首先初始化为0,首先第一个点入队列,标记为1,然后刚入队列的时候,取消标记,如果经过判断之后还有用,就再标记。然后再就是出发点的路径,因为是从起始点开始走,所以从1-》1这个路径的权值就应该初始化为0.然后再就是对取最短路的判断,如果某一路径上找到了权重更短的路径,更改值,然后判断一下是否在队列中,如果没有,入队列,标记一下。

#include<iostream>

#include<string>

#include<cstring>

#include<iomanip>

#include<cmath>

#include<vector>

#include<queue>

using namespace std;

# define maxn 2000+10

# define inf 0x3f3f3f3f

int vis[maxn];

int path[maxn];

int a[maxn][maxn];

vector<pair<int,int > >wakaka[maxn];

queue<int >q;

int spfa(int t1,int t2)

{

    memset(vis,0,sizeof(vis));

    for(int i=1; i<=maxn; i++)

    {

        path[i]=inf;

    }

    q.push( t1);

    vis[t1]=1;

    path[t1]=0;

    while(!q.empty())

    {

        int top=q.front();

        q.pop();

        vis[top]=0;

        int len=wakaka[top].size();

        for(int i=0; i<len; i++)

        {

            int temp=wakaka[top][i].first;

            if(path[temp]>path[top]+wakaka[top][i].second)//这个地方比较的是目的地的已经存过的值和新的路径存过的值。

            {

                path[temp]=path[top]+wakaka[top][i].second;

                if(vis[temp]==0)

                {

                    vis[temp]=1;

                    q.push(temp);

                }

            }

        }

    }

    return path[t2];

}

int main()

{

    int t,n;

    cin>>t>>n;

    for(int i=1; i<=t; i++)

    {

        int u,v,w;

        cin>>u>>v>>w;

        if(w>a[u][v])

            wakaka[u].push_back(make_pair(v,w));

        wakaka[v].push_back(make_pair(u,w));

    }

    int t1=spfa(1,n);

    cout<<t1<<endl;

    return 0;

}

分割线----------------------------------------------------------------

最近做了点最短路的题,总结一下。

1,一定要注意最短路操作的是有向图还是无向图,虽然样例可能过,但是ac基本是不可能的。

2,注意打上标记数组,虽然对结果不会有太大的影响,如果数据量大起来的话,如果不打标记数组,队列会出现很多已经出现过的操作。

spfa算法----最短路的更多相关文章

  1. 六度分离(floyd算法,SPFA算法,最短路—Dijkstra算法)

    Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) ...

  2. 用scheme语言实现SPFA算法(单源最短路)

    最近自己陷入了很长时间的学习和思考之中,突然发现好久没有更新博文了,于是便想更新一篇. 这篇文章是我之前程序设计语言课作业中一段代码,用scheme语言实现单源最段路算法.当时的我,花了一整天时间,学 ...

  3. 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结

    刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...

  4. 最短路之SPFA算法

    部分来自:http://blog.csdn.net/juststeps/article/details/8772755 求最短路径的算法有许多种,除了排序外,恐怕是OI界中解决同一类问题算法最多的了. ...

  5. 图论-单源最短路-SPFA算法

    有关概念: 最短路问题:若在图中的每一条边都有对应的权值,求从一点到另一点之间权值和最小的路径 SPFA算法的功能是求固定起点到图中其余各点的的最短路(单源最短路径) 约定:图中不存在负权环,用邻接表 ...

  6. 图论——最短路:Floyd,Dijkstra,Bellman-Ford,SPFA算法及最小环问题

    一.Floyd算法 用于计算任意两个节点之间的最短路径. 参考了five20的博客 Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个 ...

  7. Bellman-ford算法、SPFA算法求解最短路模板

    Bellman-ford 算法适用于含有负权边的最短路求解,复杂度是O( VE ),其原理是依次对每条边进行松弛操作,重复这个操作E-1次后则一定得到最短路,如果还能继续松弛,则有负环.这是因为最长的 ...

  8. [板子]SPFA算法+链式前向星实现最短路及负权最短路

    参考:https://blog.csdn.net/xunalove/article/details/70045815 有关SPFA的介绍就掠过了吧,不是很赞同一些博主说是国内某人最先提出来,Bellm ...

  9. 图论算法(三) 最短路SPFA算法

    我可能要退役了…… 退役之前,写一篇和我一样悲惨的算法:SPFA 最短路算法(二)SPFA算法 Part 1:SPFA算法是什么 其实呢,SPFA算法只是在天朝大陆OIers的称呼,它的正统名字叫做: ...

随机推荐

  1. BZOJ4502串——AC自动机(fail树)

    题目描述 兔子们在玩字符串的游戏.首先,它们拿出了一个字符串集合S,然后它们定义一个字 符串为“好”的,当且仅当它可以被分成非空的两段,其中每一段都是字符串集合S中某个字符串的前缀. 比如对于字符串集 ...

  2. Python 面向对象 - 内置类方法

    内置方法  内置方法  说明  __init__(self,...)  初始化对象,在创建新对象时调用  __del__(self)  释放对象,在对象被删除之前调用  __new__(cls,*ar ...

  3. 自学Aruba6.2-控制器基本维护操作(web页面配置)

    点击返回:自学Aruba之路 自学Aruba6.2-控制器基本维护操作(web页面配置) 1 显示当前控制器版本 Dashboard---Controller中 2 升级Aruab os版本 Main ...

  4. 学习Spring Boot:(二十六)使用 RabbitMQ 消息队列

    前言 前面学习了 RabbitMQ 基础,现在主要记录下学习 Spring Boot 整合 RabbitMQ ,调用它的 API ,以及中间使用的相关功能的记录. 相关的可以去我的博客/RabbitM ...

  5. pandas 从入门到遗忘

    读取大文件(内存有限): import pandas as pd reader = pd.read_csv("tap_fun_test.csv", sep=',', iterato ...

  6. 【ATcoder】Xor Sum 2

    题目大意:给定一个 N 个点的序列,求有多少个区间满足\(\oplus_{i=l}^ra[i]=\sum\limits_{i=l}^ra[i]\). 题解: 小结论:\(a\oplus b=a+b\r ...

  7. 那些神奇的before和after使用方法

    在英文单词里面:before是在什么之前.after是在什么之后.诚然,在我们的css里面, 通过使用before和after伪类元素,可以在我们想要的元素前面或者后面插入内容. 下面是使用befor ...

  8. js中事件绑定要注意的事项之如何在方法中自己打印自己的值

    下面是错误的js方法绑定,这样写会造成在方法中不能用 调用方法的dom本身的一些 东西,如各种属性或者jq对象等. <!DOCTYPE html> <html> <hea ...

  9. Linux下JDK+Eclipse安装

    Ubuntu版本14.04 JDK8_144 eclipse最新下载 注:原本安装JDK7配置好环境后报错,原来是最新eclipse的一个功能只有JDK8支持,若想使用JDK7需要注释某条代码 JDK ...

  10. advancedsearch.php织梦高级自定义模型字段无法调用解决方案

    advancedsearch.php织梦dedecms 高级自定义模型字段无法调用解决方案 ,具体步骤如下: 1  打开修改puls/advancedsearch.php文件,找到复制代码(不同版本可 ...