HDU 2066 一个人的旅行
来源:互联网 发布:海关数据免费查询 编辑:程序博客网 时间:2024/05/01 10:04
Dijkstra算法的题目,看到题目知道是用Dijkstra算法,但是有些细节还是不会,只知道这个算法的框架,还不会灵活运用
代码:
#include<iostream>#include<cstdio>#define MAX 10000000#define M 1005using namespace std;int map[M][M];int a[M],b[M];int dist[M];bool flag[M];int T,S,D;int dj(int s){ int i,j; int min; for(i=0;i<M;i++) { flag[i]=0; dist[i]=map[s][i]; } int v=s; dist[v]=0; flag[v]=1; for(j=0;j<M;j++){ min=MAX; for(i=0;i<M;i++) { if(min>dist[i]&&!flag[i]) { min=dist[i]; v=i; } } flag[v]=1; if(min==MAX) break; //剪枝 for(i=0;i<M;i++) //更新dist的值 { if(!flag[i]&&dist[i]>dist[v]+map[v][i]) { dist[i]=dist[v]+map[v][i]; } } } min=MAX; for(i=0;i<D;i++){ //求到达最喜欢的地方的最小值 if(min>dist[b[i]]) min=dist[b[i]]; } return min;}int main(){ // freopen("in.txt","r",stdin); int i,j,w,e,time; while(scanf("%d%d%d",&T,&S,&D)!=EOF) { for(i=0;i<M;i++) { for(j=0;j<M;j++) map[i][j]=MAX; } for(i=0;i<T;i++) { scanf("%d%d%d",&w,&e,&time); if(map[w][e]>time) //一定要加上这一条件,不然就WA, map[w][e]=map[e][w]=time; } for(i=0;i<S;i++) { scanf("%d",&a[i]); } for(i=0;i<D;i++) { scanf("%d",&b[i]); } int min1=MAX; for(i=0;i<S;i++) { min1=min1<dj(a[i])? min1:dj(a[i]); } printf("%d\n",min1); } return 0;}
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU-2066 一个人的旅行
- Hdu-2066 一个人的旅行
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行
- hdu 2066(一个人的旅行)
- Please update ADT to the latest version.
- 关于“无法定位程序输入点getaddrinfo于动态链接库WS32_32.dll上”的问题
- 自定义系统命令缩写
- android中Touch事件的处理逻辑
- 腾讯QQ域名的故事
- HDU 2066 一个人的旅行
- 哈夫曼树
- ios 自制放大镜效果demo
- 高速PCB 设计新手入门及进阶教程
- 飞思卡尔单片机DZ60---TPM1输出比较
- Centos下用tar源码包制作rpm包
- 关于Eclipse中Courier New字体的修改
- RGB颜色对照表
- javascript总结