zoukankan      html  css  js  c++  java
  • Dijkstra基础单源最短路径

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

     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
    ");
    56         else
    57             printf("%d
    ",dist[b]);
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    按之字形数据打印二叉树
    对称的二叉树
    如何解决哈希冲突
    二叉树的下一节点
    删除链表中重复的节点
    链表的入环节点
    python入门
    js计算总页数
    将map中的值赋值给一个java对象
    给手机发送短信
  • 原文地址:https://www.cnblogs.com/lyf123456/p/3603442.html
Copyright © 2011-2022 走看看