最短路径问题(最短路径) Love The Way You Lie 2022-08-01 14:48 256阅读 0赞 # 最短路径问题 # **Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16506 Accepted Submission(s): 4940** Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。 Input 输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。 (1<n<=1000, 0<m<100000, s != t) Output 输出 一行有两个数, 最短距离及其花费。 Sample Input 3 2 1 2 5 6 2 3 4 5 1 3 0 0 Sample Output 9 11 Source [浙大计算机研究生复试上机考试-2010年][-2010] **这是一题最短路径题目但是他的路径上权值不只是长度还有花费!这一点需要注意** **一下!主要思路就是当它们的长度相等时就选择花费最少的那个!** **还要注意的一点就是:C++的cin会超时,用scanf就能ok!我还** **对比了一下啊啊,太吓人了,差距太大了!** **下次一定要注意了!** #include<cstdio> #include<iostream> #include<cstring> using namespace std; const int maxnum=1010; const int infinity=0x3f3f3f3; struct node { int d; int p; }; node map[maxnum][maxnum]; int vis[maxnum]; int dis[maxnum]; int pri[maxnum]; int n,m; void djsta(int st) { int i,j,min_d,min_p,p; for(i=1;i<=n;i++) { dis[i]=map[st][i].d; pri[i]=map[st][i].p; }//算距离 memset(vis,0,sizeof(vis)); vis[st]=1; for(i=1;i<=n;i++)//循环次数! { min_d=infinity; min_p=infinity; for(j=1;j<=n;j++) { if(!vis[j]&&(dis[j]<min_d||vis[j]==min_d&&pri[j]<min_p)) { p=j; min_d=dis[j]; min_p=pri[j]; } }//找到最小之后,开始更新! vis[p]=1;//记录 for(j=1;j<=n;j++) { if(!vis[j]&&(map[p][j].d+dis[p]<dis[j]||map[p][j].d+dis[p]==dis[j]&&map[p][j].p+pri[p]<pri[j])) { dis[j]=map[p][j].d+dis[p]; pri[j]=map[p][j].p+pri[p]; } } } } int main() { int a,b,c,d,e,f,i,j; while(cin>>n>>m,(m+n)) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { map[i][j].d=infinity; map[i][j].p=infinity; } } while(m--) { scanf("%d%d%d%d",&a,&b,&c,&d); // cin>>a>>b>>c>>d; if(map[a][b].d>c||map[a][b].d==c&&map[a][b].p>d) { map[a][b].d=map[b][a].d=c; map[a][b].p=map[b][a].p=d; } } scanf("%d%d",&e,&f); // cin>>e>>f; djsta(e); cout<<dis[f]<<" "<<pri[f]<<endl; } } [-2010]: http://acm.hdu.edu.cn/search.php?field=problem&key=%D5%E3%B4%F3%BC%C6%CB%E3%BB%FA%D1%D0%BE%BF%C9%FA%B8%B4%CA%D4%C9%CF%BB%FA%BF%BC%CA%D4-2010%C4%EA&source=1&searchmode=source
相关 最短路径问题 最短路径问题 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^\_^ 题目描述 平面上有n个点(n<= 你的名字/ 2022年08月18日 02:30/ 0 赞/ 217 阅读
相关 最短路径 最短路径 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^\_^ 题目描述 YY 并不是把东西直接搬到 比眉伴天荒/ 2022年08月18日 02:28/ 0 赞/ 181 阅读
相关 最短路径问题 最短路径 在无向图 G=(V,E) 中,假设每条边 E\[i\] 的长度为 w\[i\],找到由顶点 V0 到其余各点的最短值。 include "stdaf 一时失言乱红尘/ 2022年08月03日 05:22/ 0 赞/ 192 阅读
相关 最短路径问题(最短路径) 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot Love The Way You Lie/ 2022年08月01日 14:48/ 0 赞/ 257 阅读
相关 最短路径 最短路径的迪杰斯特拉算法跟最小生成树的普利姆算法很像! 但是这里的像只是代码相似,实质是不一样的! 普利姆算法是从任意点开始,找到跟他最近的点记录距离,然后 比眉伴天荒/ 2022年08月01日 13:59/ 0 赞/ 188 阅读
相关 最短路径 Problem Description 为了准备一年一度的校赛,大家都在忙着往赛场搬运东西,比如气球什么的。这时YY 也没有闲着,他也加入了搬运工的行列。已知学校有N 个 客官°小女子只卖身不卖艺/ 2022年07月12日 08:26/ 0 赞/ 217 阅读
相关 最短路径问题 Problem Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到 ゞ 浴缸里的玫瑰/ 2022年07月12日 08:26/ 0 赞/ 215 阅读
相关 最短路径问题 [sdut原题链接][sdut] 最短路径问题 Time Limit: 1000MS Memory Limit: 65536KB Problem Description ゞ 浴缸里的玫瑰/ 2022年07月10日 16:29/ 0 赞/ 237 阅读
相关 最短路径问题 题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在\-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个 r囧r小猫/ 2022年06月16日 08:26/ 0 赞/ 235 阅读
相关 最短路径问题 最短路径问题 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离 小灰灰/ 2022年06月07日 05:59/ 0 赞/ 263 阅读
还没有评论,来说两句吧...