POJ 2387 Til the Cows Come Home(Dijkstra算法)

本文介绍如何使用Dijkstra算法解决最短路径问题,并特别关注处理存在多条直接连通路径的情况。通过实例演示了如何实现算法并给出AC代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




http://poj.org/problem?id=2387







最短路的简单问题   套模板 运用Dijkstra算法即可  不过要注意重边问题  即 两点之间可能会有多条直接连通的路 因为我们求最短路 所以只把这多条路中最短的一条记录下来即可



AC代码:

#include <stdio.h>  
  
  
int map[2010][2010];  
int dis[2010];  
int maxinf=999999999;  
  
  
void Dijkstra(int n){  
    int vis[2010];  
    for (int i=1;i<=n;i++)  
     {  
        dis[i]=map[1][i];  
        vis[i]=0;  
     }  
       
    vis[1]=1;  
    dis[1]=0;  
      
    int u;  
    for (int i=1;i<=n;i++){  
        int mindis=maxinf;  
        for (int j=1;j<=n;j++){  
            if (!vis[j]&&dis[j]<mindis){  
                u=j;  
                mindis=dis[j];  
             }  
               
         }   
           
        vis[u]=1;  
          
        for (int j=1;j<=n;j++){  
            if (!vis[j]&&dis[u]+map[u][j]<dis[j]){  
                dis[j]=dis[u]+map[u][j];  
             }  
         }  
          
     }   
      
 }  
  
int main (){  
    int N,M;  
    int A,B,C;  
    scanf ("%d%d",&N,&M);  
        for (int i=1;i<=M;i++){  
            for (int j=1;j<=M;j++){  
                    map[i][j]=maxinf;  
             }  
         }   
         for (int i=1;i<=N;i++){  
            scanf ("%d%d%d",&A,&B,&C);  
            if (map[A][B]>C)//注意重边   
             {  
                map[A][B]=C;  
                map[B][A]=C;      
             }  
         }  
         Dijkstra(M);   
         printf ("%d\n",dis[M]);  
      
    return 0;  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值