隐藏页面特效

COGS 2. 旅行计划

 

1|02. 旅行计划


★☆   输入文件:djs.in   输出文件:djs.out   简单对比
时间限制:3 s   内存限制:128 MB

过暑假了,阿杜准备出行旅游,他已经查到了某些城市的两两之间的距离及可行路线(可行路线有方向),如下图所示。请你编程计算从阿杜所住城市到其它城市的最短路径以帮助阿杜制定旅行计划。

【输入格式】

输入由若干行组成,第一行有三个整数,n1n100m1mn2v1mn;城市数,m城市间道路数,v是阿杜所住城市。第2m+1行是每条路的信息,每行三个整数,为道路的起点、终点和两城市间距离。(城市从0开始编号)

【输出格式】

n组(按城市编号由小至大),每组三行

第一行:城市编号及一个冒号

第二行:path及一个冒号,后面是最短路径节点编号序列(编号间用一个空格隔开)

第三行:cost及一个冒号,后面是一个整数,表示路径距离

如果没有通路则输出 no

【输入样例】

6 8 0 0 2 10 0 4 30 0 5 100 1 2 5 2 3 50 3 5 10 4 3 20 4 5 60

【输出样例】

0: no 1: no 2: path:0 2 cost:10 3: path:0 4 3 cost:50 4: path:0 4 cost:30 5: path:0 4 3 5 cost:60

AC代码:

#include<cstdio> #include<cstring> #include<queue> #define pir pair<int,int> using namespace std; const int N=1e5+10; struct node{ int v,w,next; }e[N<<1]; int tot,head[N]; int n,m,S,dis[N],qq[N]; bool vis[N]; void add(int x,int y,int z){ e[++tot].v=y; e[tot].w=z; e[tot].next=head[x]; head[x]=tot; } void dijkstra(){ priority_queue<pir,vector<pir>,greater<pir> >q; memset(dis,0x3f3f3f3f,sizeof dis); q.push(make_pair(dis[S]=0,S)); while(!q.empty()){ pir h=q.top();q.pop(); int x=h.second; if(vis[x]) continue; vis[x]=1; for(int v,w,i=head[x];i;i=e[i].next){ v=e[i].v;w=e[i].w; if(!vis[v]&&dis[v]>dis[x]+w){ q.push(make_pair(dis[v]=dis[x]+w,v)); qq[v]=x; } } } } void out(int x){ if(qq[x]==-1) return ; out(qq[x]); printf("%d ",x); } int main(){ freopen("djs.in","r",stdin); freopen("djs.out","w",stdout); memset(qq,-1,sizeof qq); scanf("%d%d%d",&n,&m,&S); for(int i=1,x,y,z;i<=m;i++){ scanf("%d%d%d",&x,&y,&z); add(x,y,z); } dijkstra(); for(int i=0;i<n;i++){ if(i==S) printf("%d:\nno\n",S); else if(dis[i]==0x3f3f3f3f) printf("%d:\nno\n",i); else{ printf("%d:\n",i); printf("path:%d ",S);out(i);putchar('\n'); printf("cost:%d\n",dis[i]); } } fclose(stdin); fclose(stdout); return 0; }

 


__EOF__

本文作者shenben
本文链接https://www.cnblogs.com/shenben/p/6045921.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   神犇(shenben)  阅读(356)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示