首页 > 其他 > 详细

基础单源最短路径

时间:2014-03-16 18:02:39      阅读:506      评论:0      收藏:0      [点我收藏+]

http://acm.hdu.edu.cn/showproblem.php?pid=1548

bubuko.com,布布扣
 1 //hdu 1548
 2 #include<stdio.h>
 3 #include<string.h>
 4 #define INF 999999
 5 int map[202][202],vis[202],dist[202],pre[202];
 6 int n,a,b;
 7 void dijkstra(int s)
 8 {
 9     for(int i=1;i<=n;i++)
10     {
11         vis[i]=0;
12         dist[i]=map[s][i];
13         pre[i]=s;
14     }
15     vis[s]=1;
16     dist[s]=0;
17     for(int i=1;i<n;i++)
18     {
19         int p=0,min=100000000;
20         for(int j=1;j<=n;j++)
21             if(!vis[j]&&dist[j]<min)
22         {
23             min=dist[j];
24             p=j;
25         }
26      vis[p]=1;
27     if(p==0)  return;
28     for(int j=1;j<=n;j++)
29         if(!vis[j]&&map[p][j]+dist[p]<dist[j])
30            {
31                dist[j]=map[p][j]+dist[p];
32                pre[j]=p;
33            }
34     }
35 
36 }
37 int main()
38 {
39     //freopen("in.txt","r",stdin);
40     while(scanf("%d",&n)!=EOF&&n)
41     {
42         int k[500];
43         scanf("%d%d",&a,&b);
44         memset(map,INF,sizeof(map));
45         for(int i=1;i<=n;i++)
46         {
47             scanf("%d",&k[i]);
48             if(i+k[i]<=n)
49                 map[i][i+k[i]]=1;
50              if(i-k[i]>0)
51                 map[i][i-k[i]]=1;
52         }
53         dijkstra(a);
54         if(dist[b]>INF)
55             printf("-1\n");
56         else
57             printf("%d\n",dist[b]);
58     }
59     return 0;
60 }
bubuko.com,布布扣

基础单源最短路径,布布扣,bubuko.com

基础单源最短路径

原文:http://www.cnblogs.com/lyf123456/p/3603442.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!