1009
来源:互联网 发布:文件制作软件 编辑:程序博客网 时间:2024/06/14 02:37
题目编号:1009
题目大意:给定编号从1到N的路,求通过的最短时间。
解题思路:根据题意,每两个街道之间应该最多是一条路,否则时间会不同,那就没有意义了。典型的是最小生成树问题,用prim算法解题。首先,初始化,把所有的路全设为无穷大,然后再根据题目添加道路的权,也就是时间。后面,也就是解题的关键,找到从1到N的最短时间。我用一个函数来实现的。首先创建2个数组,1个表示从1开始到N的最短时间,另一个1起到标记的作用。在函数内,首先初始化2个数组,然后一个大的循环从1到N,里面首先找到标记的数组未到道路的编号,然后后面一个循环加里面比较,求最短的时间,这都是在大循环内做的。而后输出数组N的数值即可。
做题感想:题目看似很简单,感觉好难,套路的话也不是很简单的,可能是初学的缘故。唉,努力努力!!
#include<iostream>#include<cstring>using namespace std;const int N=10000;int ar[101],arr[101][101],br[101],n,m,i,j,t,p;void YJY(int x){ for(i=1;i<=n;++i) ar[i]=N; ar[x]=0; memset(br,0,sizeof(br)); for(i=1;i<=n;++i) { p=-1; for(j=1;j<=n;++j) if(br[j]==0) if(p==-1||ar[j]<ar[p]) p=j; br[p]=1; for(j=1;j<=n;++j) if(br[j]==0) { t=ar[p]+arr[p][j]; if(t<ar[j]) ar[j]=t; } }}int main(){ int a,b,c; while(cin>>n>>m&&n&&m) { for(i=1;i<=n;++i) for(j=1;j<=n;++j) arr[i][j]=N; for(i=1;i<=m;++i) { cin>>a>>b>>c; arr[a][b]=arr[b][a]=c; } YJY(1); cout<<ar[n]<<endl; } return 0;}
0 0
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 1009
- 2004-1009
- 使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示
- 线程汇总(1)
- CC2541(主UART)-CC2541(从UART)串口透传实验
- SeekBar控件笔记
- 169. Majority Element
- 1009
- Guava Predicate
- IOS的用户数据本地保存
- 文章标题
- SM30里如何输入物料号自动带出物料描述
- iOS JSON转Model的库 MJExtension的基本使用指导
- 平凡而又不同
- Github创建SSH密钥
- 前端开发静态文件自动添加版本号解决方案