hdoj 1874 畅通工程续
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。
#include <stdio.h>
#define N 210
#define INF 100000000
int n, m;
int vis[N], dis[N], cost[N][N];
int min(int x, int y)
{
return x < y ? x : y;
}
void dijkstra(int s, int t)
{
int u, v;
for(u = ; u < n; u++)
{
vis[u] = ;
dis[u] = INF;
}
dis[s] = ;
while(true)
{
v = -;
for(u = ; u < n; u++)
if(!vis[u] && (v == - || dis[u]<dis[v]))
v = u;
if(v == -)
break;
vis[v] = ;
for(u = ; u < n; u++)
dis[u] = min(dis[u], dis[v]+cost[v][u]);
if(v == t)
break;
}
if(dis[t] == INF)
printf("-1\n");
else
printf("%d\n", dis[t]);
return ;
}
int main()
{
int s, t;
while(~scanf("%d%d", &n, &m))
{
//if(n<0 || n>=200 || m<0 || m>= 1000)
// break;
int i, j, a, b, c;
for(i = ; i < n; i++)
for(j = ; j < n; j++)
cost[i][j] = INF;
while(m --)
{
scanf("%d%d%d", &a, &b, &c);
if(cost[a][b] > c)
cost[a][b] = cost[b][a] = c;
}
scanf("%d%d", &s, &t);
dijkstra(s, t);
}
return ;
}
spfa代码:
#include <stdio.h>
#include <queue>
#include <string.h>
#define INF 0x3f3f3f3f
using namespace std;
int n, m, cnt, t;
int vis[], used[], dis[];
int head[];
struct node
{
int from, to, val, next;
}edge[];
int add(int x, int y, int z)
{
edge[cnt].from = x;
edge[cnt].to = y;
edge[cnt].val = z;
edge[cnt].next = head[x];
head[x] = cnt++;
}
void spfa(int s)
{
priority_queue <int> q;
memset(vis, , sizeof(vis));
memset(dis, INF, sizeof(dis));
memset(used, , sizeof(used));
vis[s] = ;
dis[s] = ;
q.push(s);
while(!q.empty())
{
int x = q.top();
q.pop();
vis[x] = ;
for(int i = head[x]; i != -; i = edge[i].next)
{
int y = edge[i].to;
if(dis[y] > dis[x]+edge[i].val)
{
dis[y] = dis[x]+edge[i].val;
q.push(y);
vis[y] = ;
used[y]++;
if(used[y] > n)
return ;
}
}
}
if(q.empty())
{
if(dis[t]==INF)
printf("-1\n");
else
printf("%d\n", dis[t]);
}
return ;
}
int main()
{
int s, a, b, x;
while(~scanf("%d%d", &n, &m))
{
cnt = ;
memset(head, -, sizeof(head));
while(m--)
{
scanf("%d%d%d", &a, &b, &x);
add(a, b, x);
add(b, a, x);
}
scanf("%d%d", &s, &t);
spfa(s);
}
return ;
}
floyd算法:
#include <stdio.h>
#define INF 0x3f3f3f3f
#define N 210
int dis[N][N];
int n, m;
void init()
{
for(int i = ; i < n; i++)
for(int j = ; j < n; j++)
if(j == i)
dis[i][j] = ;
else
dis[i][j] = INF;
}
void floyd()
{
for(int k = ; k < n; k++)
for(int i = ; i < n; i++)
{
if(dis[i][k] != INF)
{
for(int j = ; j < n; j++)
if(dis[i][j] > dis[i][k] + dis[k][j])
dis[i][j] = dis[i][k] + dis[k][j];
}
}
}
int main()
{
int a, b, x;
while(~scanf("%d%d", &n, &m))
{
init();
while(m--)
{
scanf("%d%d%d", &a, &b, &x);
if(dis[a][b] > x)
dis[a][b] = dis[b][a] = x;
}
floyd();
int s, t;
scanf("%d%d", &s, &t);
if(dis[s][t] != INF)
printf("%d\n", dis[s][t]);
else
printf("-1\n");
}
return ;
}
hdoj 1874 畅通工程续的更多相关文章
- hdoj 1874 畅通工程续【dijkstra算法or spfa算法】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdoj 1874 畅通工程续(单源最短路+dijkstra)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 思路分析:该问题给定一个无向图.起始点和终点,要求求出从起始点到终点的最短距离: 使用Dijks ...
- ACM: HDU 1874 畅通工程续-Dijkstra算法
HDU 1874 畅通工程续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Desc ...
- hdu 1874 畅通工程续
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过 ...
- HDU 1874畅通工程续(迪杰斯特拉算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Time Limit: 3000/1000 MS (Java/Others) ...
- HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题
参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上: 迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...
- hdu 1874 畅通工程续 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目分析:输入起点和终点,顶点的个数,已连通的边. 输出起点到终点的最短路径,若不存在,输出-1 ...
- HDU 1874 畅通工程续【Floyd算法实现】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...
随机推荐
- [ActionScript 3.0] AS3.0将图像的Alpha通道转换为黑白图像(复制通道方式)
import flash.display.BitmapData; /** * 将图像的Alpha通道转换为黑白图像 */ var p:Point = new Point(0,0); var bmpd: ...
- PHP发送邮件的两种方式
1.用SMTP方式发送邮件.引入phpmailer文件包,然后在文件中 <?php require_once("phpmailer/class.phpmailer.php") ...
- WCF使用小结:(1)WCF接收HTTP POST数据的处理方法
在WCF 4.0中,为我们创建Restful API有了更好的支持.通过定义UriTemplate,WebInvoke就可以快速开发API接口. 这里我记录一下HTTP POST数据时要如何接收POS ...
- 云存储性能测试工具--COSBench安装
COSBench安装 Cosbench是Intel的开源云存储性能测试软件,COSBench目前已经广泛使用与云存储测试,并作为云存储的基准测试工具使用 1 环境 1.1 操作系统 COSBench可 ...
- 如何在博客中插入jsfiddle的代码
1.进入官网:https://jsfiddle.net/ 可以看到如下界面,顶端的控制按钮包括:保存,运行,代码格式化等: 2.将html.css.js分别写在指定的位置当中,最后一个框result是 ...
- 博客后台迁移至i.cnblogs.com及小经验分享
大家好!我们已经将博客后台从原来的 www.cnblogs.com/博客地址名/admin/ 迁移至独立的二级域名 i.cnblogs.com.如果您发现任何问题,麻烦您立即向我们反馈. 虽然这次迁移 ...
- 苹果手机制作gif图片
前一段介绍了一款很好用的在模拟器上录制gif图片的工具licecap(地址:http://www.cnblogs.com/10-19-92/p/5593785.html), 但是licecap不能使用 ...
- Spark Streaming源码解读之Receiver生成全生命周期彻底研究和思考
本期内容 : Receiver启动的方式设想 Receiver启动源码彻底分析 多个输入源输入启动,Receiver启动失败,只要我们的集群存在就希望Receiver启动成功,运行过程中基于每个Tea ...
- App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.-解决办法
运行环境:Xcode Version 7.3.1 (7D1014) 使用NSURL进行数据请求数据代码: -(NSData *)requestData{ NSURL *url = [NSURL URL ...
- 26、首先通过javascript包的异步加载来学习echarts包的结构
1.在这里先写一写前言,今天在公司搞定了一个对于滚动条进行定位的case,明天开始做TestManagement. 首先大家先来一起看一看流行的javascript文件的加载方式,这里采用别人博客上的 ...