HDOJ 3665 Seaside(最短路径,dijkstra算法)

来源:互联网 发布:html a标签调用php文件 编辑:程序博客网 时间:2024/05/16 01:03

Seaside

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1373    Accepted Submission(s): 988


Problem Description
XiaoY is living in a big city, there are N towns in it and some towns near the sea. All these towns are numbered from 0 to N-1 and XiaoY lives in the town numbered ’0’. There are some directed roads connecting them. It is guaranteed that you can reach any town from the town numbered ’0’, but not all towns connect to each other by roads directly, and there is no ring in this city. One day, XiaoY want to go to the seaside, he asks you to help him find out the shortest way.
 

Input
There are several test cases. In each cases the first line contains an integer N (0<=N<=10), indicating the number of the towns. Then followed N blocks of data, in block-i there are two integers, Mi (0<=Mi<=N-1) and Pi, then Mi lines followed. Mi means there are Mi roads beginning with the i-th town. Pi indicates whether the i-th town is near to the sea, Pi=0 means No, Pi=1 means Yes. In next Mi lines, each line contains two integers SMi and LMi, which means that the distance between the i-th town and the SMi town is LMi.
 

Output
Each case takes one line, print the shortest length that XiaoY reach seaside.
 

Sample Input
51 01 12 02 33 11 14 1000 10 1
 

Sample Output
2
 
 
 
按照题意的输入建图即可,最短路水题。
 
 
dijkstra算法,代码如下:
 
 
#include<cstdio>#include<cstring>#define INF 0x3f3f3f#define maxn 12int map[maxn][maxn],dis[maxn],n;void dijkstar(){int visit[maxn];int i,j,min,next=0;for(i=0;i<n;++i){dis[i]=map[0][i];visit[i]=0;}visit[0]=1;for(i=1;i<n;++i){min=INF;for(j=0;j<n;++j){if(!visit[j]&&min>dis[j]){next=j;min=dis[j];}}visit[next]=1;for(j=0;j<n;++j){if(!visit[j]&&dis[j]>dis[next]+map[next][j])   dis[j]=dis[next]+map[next][j];}}}int main(){int i,j,end[10],num,d,k,sea,place;while(scanf("%d",&n)!=EOF){for(i=0;i<n;++i){for(j=0;j<n;++j){if(i==j)  map[i][j]=0;else  map[i][j]=INF;}}k=0;for(i=0;i<n;++i){scanf("%d%d",&num,&sea);if(sea)  end[k++]=i;//将在海边小镇存入数组 for(j=0;j<num;++j)    {    scanf("%d%d",&place,&d);    if(map[i][place]>d)       map[i][place]=d;//注意是单向图     }}dijkstar();int ans=INF;for(i=0;i<k;++i)//找到到海边最短的路径权值 {if(dis[end[i]]<ans)   ans=dis[end[i]];}printf("%d\n",ans);}return 0;}

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胸经过整容后变得胸闷怎么办? 网瘾高中不学习怎么办 犯罪人逃到美国怎么办 10岁儿童偏胖怎么办 土地面积与实际面积不符怎么办 军转进省直单位双选失败怎么办 房改房楼龄到了70年怎么办 商品房房改房到70年后怎么办 公务员未享受房改政策怎么办 两套房改房违规怎么办 法院保全的物品在我家怎么办 西瓜视频答题结束了钱没提现怎么办 诚信答题密码忘了怎么办 我未成年杀了人怎么办 错过了网课考试怎么办? 2018广东省普法考试0分怎么办 小孩错过了小升初的考试怎么办 错过了自主招生考试怎么办? 科目一考试错过了时间怎么办 中学生网瘾怎么办济南远大认真 u盘安装不了系统怎么办 对敏感脆弱的青春期孩子怎么办? 脸变得很交黑怎么办 玩手机长痘痘了怎么办 青少年左侧后背突发疼痛怎么办 纵欲过度导致青少年白发怎么办 20岁了不想长大怎么办 网吧老板跑路了怎么办 网吧玩地下城卡怎么办 个人公积金封存之前厂子欠费怎么办 学生欠了2万块怎么办 玉米去完库存量cool怎么办 幸福蓝海电子券过期怎么办 幸福蓝海国际影城会员怎么办 幸福蓝海会员卡过期了怎么办 电机线圈处于平衡位置怎么办 混联电路求电功率最小怎么办 电脑超出工作频率范围怎么办 手机红外线感应器坏了怎么办 我的世界左右慢怎么办 发电机自动启停装置故障怎么办