1381:城市路(Dijkstra)

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 4066     通过数: 1163

【题目描述】

罗老师被邀请参加一个舞会,是在城市n,而罗老师当前所处的城市为1,附近还有很多城市2~n-1,有些城市之间没有直接相连的路,有些城市之间有直接相连的路,这些路都是双向的,当然也可能有多条。

现在给出直接相邻城市的路长度,罗老师想知道从城市1到城市n,最短多少距离。

【输入】

输入n, m,表示n个城市和m条路;

接下来m行,每行a b c, 表示城市a与城市b有长度为c的路。

【输出】

输出1到n的最短路。如果1到达不了n,就输出-1。

【输入样例】

5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100

【输出样例】

90

【提示】

【数据规模和约定】

1≤n≤2000

1≤m≤10000

0≤c≤10000

【来源】

No

Floyd:(被省略了。。。。)

Dijkstra:

#include<bits/stdc++.h>
using namespace std;
int g[][];
int n,m;
int dis[];
bool used[];
int main(){
memset(g,0x3f,sizeof(g));
cin>>n>>m;
for(int i=;i<=m;++i){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
g[a][b]=min(g[a][b],c);
g[b][a]=min(g[b][a],c);
}
memset(dis,0x3f,sizeof(dis));
dis[]=;
for(int i=;i<=n;++i){
int minn=0x3f3f3f3f,minn_j=;
for(int j=;j<=n;++j){
if(used[j]==false&&dis[j]<minn){
minn=dis[j];
minn_j=j;
}
}
if(minn_j==)
break;
used[minn_j]=true;
for(int j=;j<=n;j++)
if(used[j]==false)
dis[j]=min(dis[j],dis[minn_j]+g[minn_j][j]);
}
if(dis[n]==0x3f3f3f3f)
cout<<-;
else
cout<<dis[n];
}

+领接表:

#include<bits/stdc++.h>
using namespace std;
struct node{
int to,val;
};
vector<node> edge[]; int dis[];
bool used[];
int main(){
int n,m;
cin>>n>>m;
int a,b,c;
for(int i=;i<=m;i++){
cin>>a>>b>>c;
node t;
t.to=b;t.val=c;
edge[a].push_back(t);
t.to=a;t.val=c;
edge[b].push_back(t);
}
memset(dis,0x3f,sizeof(dis));
dis[]=;
for(int i=;i<=n;i++){
int minn=0x3f3f3f3f,minn_j=;
for(int j=;j<=n;j++){
if(used[j]==false&&dis[j]<minn){
minn=dis[j];
minn_j=j;
}
}
if(minn_j==)
break;
used[minn_j]=true;
int from=minn_j;
for(int j=;j<edge[from].size();j++){
int to=edge[from][j].to;
int val=edge[from][j].val;
dis[to]=min(dis[to],dis[from]+val);
} } if(dis[n]==0x3f3f3f3f)
cout<<-;
else
cout<<dis[n]; return ;
}

+链式前向星:

#include<bits/stdc++.h>
using namespace std;
struct node
{
int to,val,next;
};
node edge[]; int dis[];
bool used[];
int head[];
int num=;
void add_edge(int from,int to,int val)
{
num++;
edge[num].to=to;
edge[num].val=val;
edge[num].next=head[from];
head[from]=num;
} int main()
{
int n,m;
cin>>n>>m;
int a,b,c;
for(int i=;i<=m;i++)
{
cin>>a>>b>>c;
add_edge(a,b,c);
add_edge(b,a,c);
} memset(dis,0x3f,sizeof(dis));
memset(used,false,sizeof(used));
dis[]=;
for(int i=;i<=n;i++)
{
int minn=0x3f3f3f3f,minn_j=;
for(int j=;j<=n;j++)
{
if(used[j]==false && dis[j]<minn)
{
minn=dis[j];
minn_j=j;
}
}
if(minn_j==)
break;
used[minn_j]=true;
int from=minn_j;
for(int j=head[from];j!=;j=edge[j].next)
{
int to=edge[j].to;
int val=edge[j].val;
dis[to]=min(dis[to],dis[from]+val);
}
} if(dis[n]==0x3f3f3f3f)
cout<<-;
else
cout<<dis[n]; return ;
}

Floyd && Dijkstra +邻接表 +链式前向星(真题讲解来源:城市路)的更多相关文章

  1. 邻接表&链式前向星

    链式前向星: 适合点多.边少的情况 不适用于大量遍历出边的题目(因为cache miss) 邻接表: 如果用邻接表来实现的话,一般就用vector嘛,我们都知道vector都是自动扩容的,在空间满了以 ...

  2. 洛谷P3371单源最短路径Dijkstra版(链式前向星处理)

    首先讲解一下链式前向星是什么.简单的来说就是用一个数组(用结构体来表示多个量)来存一张图,每一条边的出结点的编号都指向这条边同一出结点的另一个编号(怎么这么的绕) 如下面的程序就是存链式前向星.(不用 ...

  3. 洛谷 P1352 没有上司的舞会【树形DP/邻接链表+链式前向星】

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  4. 洛谷 P4779 【dijkstra】+(堆优化)+(链式前向星) (模板题)

    <题目链接> 题目描述 给定一个 N 个点, M 条有向边的带非负权图,请你计算从 S 出发,到每个点的距离. 数据保证你能从 S 出发到任意点. 输入格式: 第一行为三个正整数 N,M, ...

  5. 洛谷 P4779 :【模板】单源最短路径(标准版)(Dijkstra+堆优化+链式前向星)

    题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 100→60: Ag→Cu: 最终,他因此没能与理想 ...

  6. POJ - 1330 Nearest Common Ancestors 最近公共祖先+链式前向星 模板题

    A rooted tree is a well-known data structure in computer science and engineering. An example is show ...

  7. 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板

    一:dijkstra算法时间复杂度,用优先级队列优化的话,O((M+N)logN)求单源最短路径,要求所有边的权值非负.若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的 ...

  8. 图的存储结构:邻接矩阵(邻接表)&链式前向星

    [概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组gr ...

  9. 三种邻接表存图模板:vector邻接表、数组邻接表、链式前向星

    vector邻接表: ; struct Edge{ int u,v,w; Edge(int _u=0,int _v=0,int _w=0){u=_u,v=_v,w=_w;} }; vector< ...

随机推荐

  1. Docker 从入门到掉坑

    Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...

  2. 学习笔记56_WebServices

    1.Web services,就是新建项,选择Web服务: 2. 然后可以用Winform来调用webServices: 然后添加“服务引用”,,命名空间可以自己填. 3. 直接 new ,然后调用就 ...

  3. [考试反思]1031csp-s模拟测试95:优势

    假的三首杀.因为交文件所以他们都不往OJ上交. 假装是三首杀吧.嗯. 然而昨天还是没有AK.好像说是按照64位评测机的评测结果为准. 但是联赛省选的机子好像都是32位的?也就是和我们正在用的一致. 所 ...

  4. CSPS_104

    又被爆踩. 正解写挂. 暴力不会. 只会改题. 还要加油. T1 $nlog^2$是显然的 那么考虑只二分一次,就$nlog$了! 有什么能通过一次二分$O(1)$得到呢? 二分a的位置,$O(1)$ ...

  5. [UWP]使用SpringAnimation创建有趣的动画

    1. 什么是自然动画 最近用弹簧动画(SpringAnimation)做了两个番茄钟,关于弹簧动画官方文档已经介绍得够详细了,这篇文章就摘录一些官方文档核心内容. 在传统UI中,关键帧动画(KeyFr ...

  6. vue ui九宫格、底部导航、新闻列表、跨域访问

    一.  九宫格 九宫格:在mint-ui组件库基于vue框架 mui不是基于vue框架 只是css/js文件 (1)官方网站下载安装包 (2)copy css js fonts[字体图标] src/l ...

  7. linux-mysql8的安装步骤详解及需要注意的坑

    (本文由言念小文原创,转载请注明出处) 前言 最近安装mysql8时,遇到了一些问题,记录下来作为以后操作指导资料. Linux上mysql安装方法个人目前使用的有两种: 一种是基于rpm安装: 另一 ...

  8. Tomcat开启关闭常见问题

    启动 bin/startup.bat ,双击运行该文件即可 访问:浏览器输入: http://localhost:8080 回车访问自己 http://别人的ip:8080 访问别人 可能出现的问题: ...

  9. kubernetes实战(二十八):Kubernetes一键式资源管理平台Ratel安装及使用

    1. Ratel是什么? Ratel是一个Kubernetes资源平台,基于管理Kubernetes的资源开发,可以管理Kubernetes的Deployment.DaemonSet.Stateful ...

  10. 初识web API接口及Restful接口规范

    一.web API接口 什么是web API接口?: 明确了请求方式,提供对应后台所需参数,请求url链接可以得到后台的响应数据 url : 返回数据的url https://api.map.baid ...