图论基本算法练习

这篇博客主要介绍了图论基本算法的应用,通过一个实际问题——寻找从车站到皮球家的最短路径来讲解。作者给出了C、Python和Java三种语言的实现,分别实现了Dijkstra算法来解决这个问题。此外,还提到了完美数的概念并提供了求解小于给定数的所有完美数之和的Java代码实现。
摘要由CSDN通过智能技术生成

图论基本算法练习

小呆要去位于 A 市的皮球家。小呆来到 A 市的车站,买了一张 A 市的地图,他发现这里的地形非常的复杂。A 市的街道一共有 N 个路口,M 条道路,每条道路连接着两个路口,并且有各自的长度。目前,小呆所在的车站位于编号为 1 的路口,而皮球家所在的路口编号为 N,小呆准备打出租车去,当然,路程越小,付的钱就越少。问题摆在眼前:请帮助小呆寻找一条最短路径,使得他可以花最少的钱到达皮球家。

输入
第一行有两个整数 N, M (N≤1000) 分别代表路口数和街道数。以下有 M 行用以描述各个街道,每行有三个数字 P1, P2, L,分别代表此街道起点编号,此街道终点编号以及此街道的长度。保证所给的数据可以构成连通图。
输出
一行一个整数,说明最短路径的长度。

C

#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
vector<vector > mp(n+1,vector(n+1,INT_MAX));
int p1,p2,l;
for(int i=0;i<m;++i){
cin>>p1>>p2>>l;
mp[p1][p2]=l;
mp[p2][p1]=l;
}
vector dis(n+1,INT_MAX);
vector visited(n+1,false);
dis[1]=0;
while(1){
int index=-1;
int mind=INT_MAX;
for(int i=1;i<=n;++i){
if(visited[i])continue;
if(dis[i]<mind){
mind=dis[i];
index=i;
}
}
if(index==n){
cout<<dis[index]<<endl;
return 0;
}
visited[index]=true;
for(int i=1;i<&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值