首页 技术 正文
技术 2022年11月23日
0 收藏 989 点赞 4,268 浏览 1391 个字

Luogu P3371 单源最短路径

题目描述

如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。

输入输出格式

输入格式:

第一行包含三个整数N、M、S,分别表示点的个数、有向边的个数、出发点的编号。

接下来M行每行包含三个整数Fi、Gi、Wi,分别表示第i条有向边的出发点、目标点和长度。

输出格式:

一行,包含N个用空格分隔的整数,其中第i个整数表示从点S出发到点i的最短路径长度(若S=i则最短路径长度为0,若从点S无法到达点i,则最短路径长度为2147483647)

输入输出样例

输入样例#1:

4 6 1
1 2 2
2 3 2
2 4 1
1 3 5
3 4 3
1 4 4

输出样例#1:

0 2 4 3

分析:

啊无负边权的有向图的单源最短路径

代码+注释:

 #include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#define MAXN 10005
#define MAXM 500005
using namespace std; const long long MAX = ; int n, m, p_st;
int x, y, d;
vector<int> l[MAXN], dis[MAXN]; //采用邻接表的存储方式
int ans_dis[MAXN]; //答案储存数组
bool visited[MAXN]; //标记是否被访问过 void read(int a, int b, int d) { //邻接表的读入
l[a].push_back(b);
dis[a].push_back(d);
} void spfa() { //不就是按照BFS打一波… queue<int> q; //新建队列
visited[p_st] = true; //源点设为已经访问过了
ans_dis[p_st] = ; //到源点的最短路径为0
q.push(p_st); //进队开始BFS while (!q.empty()) { //开始BFS
int now = q.front(); //now为目前所在的点
for (int i = ; i < l[now].size(); i++) { //在它周围可以去到的点里绕一圈
int u = l[now][i], v = dis[now][i]; //u表示目前遍历到的点 v为目前的点到u的距离
if (ans_dis[u] > ans_dis[now] + v) //若可更新距离
{
ans_dis[u] = ans_dis[now] + v; //更新
if (!visited[u]) {
visited[u] = true; //标记访问过
q.push(u); //拉进队列
}
}
} visited[now] = false; // 不要忘记打这一句兄dei SFPA和BFS不同点
q.pop(); // 出队
} } int main() { scanf("%d%d%d", &n, &m, &p_st); //N为点的个数 M为有向边的个数 P_ST为出发点的编号
for (int i = ; i <= n; i++)
ans_dis[i] = MAX / ; //当然是为了防止判断的时候爆炸而设定的
for (int i = ; i <= m; i++) {
scanf("%d%d%d", &x, &y, &d);
read(x, y, d);
} spfa(); for (int i = ; i <= n; i++)
if (ans_dis[i] == MAX / ) printf("%lld ", MAX); //到不了这个点
else printf("%d ", ans_dis[i]); //到得了就输出 return ;
}

(仅供个人复习使用)

下一篇: fiddler 应用
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,991
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,505
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,349
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,134
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,766
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,844