hdu3665-Seaside(SPFA,dijkstra,floyd)
Seaside
from the town numbered ’0’, but not all towns connect to each other by roads directly, and there is no ring in this city. One day, XiaoY want to go to the seaside, he asks you to help him find out the shortest way.
are Mi roads beginning with the i-th town. Pi indicates whether the i-th town is near to the sea, Pi=0 means No, Pi=1 means Yes. In next Mi lines, each line contains two integers SMi and LMi, which means that the distance between the
i-th town and the SMi town is LMi.
5
1 0
1 1
2 0
2 3
3 1
1 1
4 100
0 1
0 1
2
最短路径。话不多说,SPFA,dijkstra,floyd各贡献一枚!
dijkstra:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
int map[15][15],dis[1000],vis[1000],target[15];
int N;
void dijkstra()
{
memset(dis,INF,sizeof(dis));
int i,j;
for(i=0;i<N;i++)
{
dis[i]=map[0][i];
vis[i]=0;
}
dis[0]=0;
vis[0]=1;
for(i=0;i<N;i++)
{
int mi=INF,mark=-1;
for(j=0;j<N;j++)
{
if(!vis[j]&&dis[j]<mi)
{
mi=dis[j];
mark=j;
}
}
if(mark==-1)
break;
vis[mark]=1;
for(j=0;j<N;j++)
{
if(!vis[j]&&dis[j]>dis[mark]+map[mark][j])
dis[j]=dis[mark]+map[mark][j];
}
}
}
int main()
{
int n,a,b,d,i,j,m;
while(scanf("%d",&N)!=EOF)
{
int t=0;
memset(map,INF,sizeof(map));
for(i=0;i<N;i++)
{
scanf("%d%d",&m,&n);
if(n)
target[t++]=i;
for(j=0;j<m;j++)
{
scanf("%d%d",&a,&b);
map[i][a]=map[a][i]=b;
}
}
dijkstra();
int s[15];
for(i=0;i<t;i++)
s[i]=dis[target[i]];
sort(s,s+t);
printf("%d\n",s[0]);
}
return 0;
}
floyd:
#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
int target[1000],map[15][15];
int N;
void floyd()
{
int i,k,j;
for(k=0;k<N;k++)
{
for(i=0;i<N;i++)
{
if(map[k][i]==INF)
continue;
for(j=0;j<N;j++)
{
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
}
}
}
}
int main()
{
int n,i,j,a,d,m;
while(scanf("%d",&N)!=EOF)
{
int t=0;
memset(map,INF,sizeof(map));
for(i=0;i<N;i++)
{
scanf("%d%d",&m,&n);
if(n)
target[t++]=i;
for(j=0;j<m;j++)
{
scanf("%d%d",&a,&d);
map[i][a]=map[a][i]=d;
}
}
floyd();
int q=INF;
for(i=0;i<t;i++)
q=q>map[0][target[i]]?map[0][target[i]]:q;
printf("%d\n",q);
}
return 0;
}
SPFA:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define INF 0x3f3f3f3f
using namespace std;
int head[20],target[15],vis[20],dis[20];
int N,t,w;
struct node
{
int from,to,weight,next;
}s[1000];
void spfa()
{
memset(vis,0,sizeof(vis));
memset(dis,INF,sizeof(dis));
queue<int> q;
q.push(0);
vis[0]=1;
dis[0]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
dis[0]=0;
for(int k=head[u];k!=-1;k=s[k].next)
{
int v=s[k].to;
if(dis[v]>dis[u]+s[k].weight)
{
dis[v]=dis[u]+s[k].weight;
if(!vis[v])
{
q.push(v);
vis[v]=1;
}
}
} }
int qw[1000];
for(int i=0;i<t;i++)
qw[i]=dis[target[i]];
sort(qw,qw+t);
printf("%d\n",qw[0]);
}
int main()
{
int n,a,b,d,i,j,m;
while(scanf("%d",&N)!=EOF)
{
t=0,w=0;
memset(head,-1,sizeof(head));
for(i=0;i<N;i++)
{
scanf("%d%d",&m,&n);
if(n)
target[t++]=i;
for(j=0;j<m;j++)
{
scanf("%d%d",&a,&b);
s[w].from=i;
s[w].to=a;
s[w].weight=b;
s[w].next=head[i];
head[i]=w++;
s[w].from=a;
s[w].to=i;
s[w].weight=b;
s[w].next=head[a];
head[a]=w++;
}
}
spfa();
}
return 0;
}
三种方法。各有利弊,可是floyd无疑是最简单的,三重for循环即可了。只是时间复杂度挺高的,easy超时。但这个题,0ms没问题!
有什么问题希望大家指出。谢谢!
hdu3665-Seaside(SPFA,dijkstra,floyd)的更多相关文章
- ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- HDU 1874 畅通工程续 SPFA || dijkstra||floyd
http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目大意: 给你一些点,让你求S到T的最短路径. 我只是来练习一下SPFA的 dijkstra+邻接矩阵 ...
- HDU 1874 SPFA/Dijkstra/Floyd
这题作为模板题,解法好多... 最近周围的人都在搞图论阿,感觉我好辣鸡,只会跟风学习. 暂时只有SPFA和Dijkstra的 SPFA (邻接表版.也可以写成临接矩阵存图,但题目可能给出平行边的,所以 ...
- poj1847 Tram(Dijkstra || Floyd || SPFA)
题目链接 http://poj.org/problem?id=1847 题意 有n个车站,编号1~n,每个车站有k个出口,车站的出口默认是k个出口中的第一个,如果不想从默认出口出站,则需要手动选择出站 ...
- Dijkstra、Bellman_Ford、SPFA、Floyd算法复杂度比较
参考 有空再更新下用c++, 下面用的Java Dijkstra:适用于权值为非负的图的单源最短路径,用斐波那契堆的复杂度O(E+VlgV) BellmanFord:适用于权值有负值的图的单源最短路径 ...
- 最短路问题(Bellman/Dijkstra/Floyd)
最短路问题(Bellman/Dijkstra/Floyd) 寒假了,继续学习停滞了许久的算法.接着从图论开始看起,之前觉得超级难的最短路问题,经过两天的苦读,终于算是有所收获.把自己的理解记录下来,可 ...
- POJ2387 Til the Cows Come Home(SPFA + dijkstra + BallemFord 模板)
Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37662 Accepted ...
- 最短路径:Dijkstra & Floyd 算法图解,c++描述
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- dijkstra,SPFA,Floyd求最短路
Dijkstra: 裸的算法,O(n^2),使用邻接矩阵: 算法思想: 定义两个集合,一开始集合1只有一个源点,集合2有剩下的点. STEP1:在集合2中找一个到源点距离最近的顶点k:min{d[k] ...
随机推荐
- marquee.js
图片无缝滚动工具类 CreateTime--2018年3月7日17:11:03 Author:Marydon /** * 图片无缝滚动 * @description * 将要滚动的图片复制一份作为 ...
- JConsole的使用手册 JDK1.5(转)
一篇Sun项目主页上介绍JConsole使用的文章,前段时间性能测试的时候大概翻译了一下以便学习,今天整理一下发上来,有些地方也不知道怎么翻,就保留了原文,可能还好理解点,呵呵,水平有限,翻的不好,大 ...
- nopi使用 设置列样式 宽高 设置分页符
HSSFWorkbook book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet("test_01"); sheet. ...
- DEDECMS 添加栏目图片
当我们一个栏目列表都用缩略图来表示产,而不仅仅只是文字,如果没有这项功能会非常麻烦,网上有很多这方面的资料,但是都试过了有很多问题,自己研究一下,测试基本通过.需要新加字段 typeimg 后台执行S ...
- Easyui 二级菜单
<div class="fitem"> <label>所在城市:</label> <input id="cityId" ...
- 使用 scikit-learn 实现多类别及多标签分类算法
多标签分类格式 对于多标签分类问题而言,一个样本可能同时属于多个类别.如一个新闻属于多个话题.这种情况下,因变量yy需要使用一个矩阵表达出来. 而多类别分类指的是y的可能取值大于2,但是y所属类别是唯 ...
- Application Request Route实现IIS Server Farms集群负载详解(转)
http://www.cnblogs.com/knowledgesea/p/5099893.html http://www.cnblogs.com/smileberry/p/4300849.html
- UNIX网络编程卷1 时间获取程序client UDP 协议无关
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP.协议无关,调用 getaddrinfo 和 udp_client **/ ...
- JDK1.9-新特性
1. Java平台级模块系统 该特性使Java9最大的一个特性,Java提供该功能的主要的动机在于,减少内存的开销,JVM启动的时候,至少会有30~60MB的内存加载,主要原因是JVM需要加载rt.j ...
- [git]git命令行自动补齐
1. 下载Git-completion.bash github地址:https://github.com/markgandolfo/git-bash-completion.git 2. copy到用户 ...