这题作为模板题,解法好多...

最近周围的人都在搞图论阿,感觉我好辣鸡,只会跟风学习。

暂时只有SPFA和Dijkstra的

SPFA (邻接表版。也可以写成临接矩阵存图,但题目可能给出平行边的,所以要注意找最小的边储存,还要注意判断一个点是否多次进入队列)老实说觉得SPFA好像只是被队列优化过的ford一样的..

 #include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <utility>
#include <vector>
#include <queue>
#define MAXX 10010
using namespace std; const int N = ;
const int INF = 0x3f3f3f3f; typedef struct sion
{
int dis;
int nxp;
}sion; int dic[N];
bool vis[N];
vector<sion>li[N]; int spfa(int &s, int &t)
{
queue<int>q;
q.push(s);
vis[s] = ;
dic[s] = ;
while(!q.empty())
{
int pre = q.front();
q.pop();
for(int i = ; i < li[pre].size(); i++)
{
// cout << dic[li[pre][i].nxp] << "~";
if(dic[li[pre][i].nxp] > dic[pre] + li[pre][i].dis)
{
dic[li[pre][i].nxp] = dic[pre] + li[pre][i].dis;
q.push(li[pre][i].nxp);
// cout << dic[li[pre][i].nxp] << "!";
}
} }
return dic[t];
} void init()
{
memset(vis,false,sizeof(vis));
memset(dic,INF,sizeof(dic));
for(int i = ; i < N; i++)
li[i].clear();
return ;
} int main()
{
int n, m;
int s, t;
while(cin >> n >> m)
{
init();
sion a;
int x;
for(int i = ; i < m; i++)
{
scanf("%d%d%d",&x, &a.nxp, &a.dis);
li[x].push_back(a);
int temp = a.nxp;
a.nxp = x;
li[temp].push_back(a);
}
scanf("%d%d", &s, &t);
int y = spfa(s, t);
if(y >= INF)
{
printf("-1\n");
}
else printf("%d\n", y);
}
}

Dijkstra(邻接表版。临接矩阵需要注意的同上) 搞了几个小时,最后WA发现原来是原理没搞清orz,每次从一个点out后,需要找的是未被标记的离起点最小的点,而我找的是队列里离上一个点最小的点,这就有问题了。唉,人蠢没得治

 #include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <queue>
#include <utility>
#include <vector>
#define MAXX 1010
#define MMI(x) memset(x, INF, sizeof(x))
#define MMF(x) memset(x, false, sizeof(x))
using namespace std; const int N = ;
const int INF = 0x3f3f3f3f; typedef struct sion
{
int dis;
int nxp;
}sion; vector<sion> edge[MAXX]; int dic[N];
bool vis[N]; void init()
{
memset(vis,false,sizeof(vis));
memset(dic,INF,sizeof(dic));
for(int i = ; i < MAXX; i++)
{
edge[i].clear();
}
}
void dijkstra(int &s, int &n)
{
queue<int >q;
vis[s] = ;
dic[s] = ;
q.push(s); while(!q.empty())
{
int mi = INF;
int t = q.front();
int x = ;
q.pop();
for(int i = ; i < edge[t].size(); i++)
{
int np = edge[t][i].nxp;
int s = dic[t] + edge[t][i].dis; if(dic[np] > s && !vis[np])
{
dic[np] = s;
}
}
for(int i = ; i < n; i ++)
if(!vis[i] && mi > dic[i])
mi = dic[i], x = i;
if(mi == INF)
break;
q.push(x);
vis[x] = ;
}
} int main()
{
int n, m;
sion a, b;
while(cin >> n >> m)
{
init();
int s, t;
for(int i = ; i < m; i++)
{
scanf("%d%d%d", &t, &a.nxp, &a.dis);
edge[t].push_back(a);
int temp = a.nxp;
a.nxp = t;
edge[temp].push_back(a);
}
scanf("%d%d", &s, &t);
dijkstra(s, n);
if(dic[t] >= INF)
printf("-1\n");
else
printf("%d\n", dic[t]);
}
}

HDU 1874 SPFA/Dijkstra/Floyd的更多相关文章

  1. hdu 1874(Dijkstra + Floyd)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Me ...

  2. ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  3. HDU 1874 畅通工程续 SPFA || dijkstra||floyd

    http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目大意: 给你一些点,让你求S到T的最短路径. 我只是来练习一下SPFA的 dijkstra+邻接矩阵 ...

  4. hdu3665-Seaside(SPFA,dijkstra,floyd)

    Seaside Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  5. hdu 1874 畅通工程续(模板题 spfa floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 spfa 模板 #include<iostream> #include<stdio ...

  6. hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...

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

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

  8. ACM: HDU 1874 畅通工程续-Dijkstra算法

    HDU 1874 畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Desc ...

  9. HDU 1874 畅通工程续【Floyd算法实现】

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. 【转】CentOS: 开放80、22、3306端口操作

    #/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT#/sbin/iptables -I INPUT -p tcp --dport 22 -j AC ...

  2. 软工2017团队协作第七周——个人PSP

    10.27 --11.2本周例行报告 1.PSP(personal software process )个人软件过程. 类型 任务 开始时间                结束时间 中断时间 实际用时 ...

  3. Java学习个人备忘录之继承

    继承的好处1. 提高了代码的复用性.2. 让类与类之间产生了关系,给第三个特征多态提供了前提. java中支持单继承,不直接支持多继承,但对C++中的多继承机制进行改良.java支持多层继承. C继承 ...

  4. Unity3d学习日记(五)

      之前用3dsmax将模型转成FBX怎么也没有办法自动导入材质到Unity3d中(试过勾选了导出嵌入媒体,没用).索性试了试c4d,发现是可行的,看来像我这种菜鸡还是更加适合用c4d.   拿zoe ...

  5. Centos安装TFTP/NFS/PXE服务器网络引导安装系统

    客户端网卡要求支持以PXE启动,配置都在服务端进行,通过PXE网络启动安装系统流程: 客户端以PXE启动发送DHCP请求: 服务器DHCP应答,包括客户端的IP地址,引导文件所在TFTP服务器: 客户 ...

  6. C# Designer.cs

    designer.cs 是窗体设计器生成的代码文件,作用是对窗体上的控件做初始化工作(在函数InitializeComponent()中) VS2003以前都把这部分代码放到窗体的cs文件中,由于这部 ...

  7. 自定义JS Map 函数

    // 自定义JS Map 函数 function Map() { var map = function (key, value) {//键值对 this.key = key; this.value = ...

  8. 浅析Docker容器的应用场景

    本文来自网易云社区 作者:娄超 过去几年开源界以openstack为代表的云计算持续火了好久,这两年突然又冒出一个叫Docker的容器技术,其发展之迅猛远超预料.网上介绍Docker容器的文章已经很多 ...

  9. htm中的 src未指定具体路径的话 默认查找当前文件夹

    htm中的 src未指定具体路径的话 默认查找当前文件夹

  10. nopi导出

    1.NPOI官方网站:http://npoi.codeplex.com/ 可以到此网站上去下载最新的NPOI组件版本 2.NPOI在线学习教程(中文版): http://www.cnblogs.com ...