POJ 2387 Til the Cows Come Home 最短路 Dijstra

题意:给出两个整数T,N,然后输入一些点直接的距离,求N和1之间的最短距离。。

思路:dijkstra求单源最短路,但是要注意判重。

import java.util.*;   
public class Main{   
    public static void main(String args[]){   
        Scanner in=new Scanner(System.in);   
        int c=0;   
        int t=in.nextInt();//输入顺序错误WA了N次!!!看清题意!   
        int n=in.nextInt();   
        int dist[]=new int[n+1];//先输入再确定数组大小!!!RE了N次!   
        int[][] w=new int[n+1][n+1];   
        for(int i=1;i<=n;i++){   
            for(int j=1;j<=n;j++){   
                w[i][j]=Integer.MAX_VALUE;   
            }   
        }   
        for(int i=0;i< t;i++){//输入两点及之间距离   
            int sn=in.nextInt();   
            int en=in.nextInt();   
            c=in.nextInt();   
            if(c< w[sn][en])   
                w[sn][en]=w[en][sn]=c;   
        }   
        dijkstra(n,w,dist);   
        System.out.println(dist[1]);   
    }   
       
    public static void dijkstra(int v ,int[][] a, int[] dist){//最短路径dijkstra算法   
         int nn = dist.length - 1 ;         
         boolean[] s = new boolean[nn+1];        
               //初始化         
         for(int i = 1; i <= nn; i++)      
             dist[i] = a[v][i];               
         dist[v] = 0;          
         s[v] = true;        
         for(int i = 1; i < nn; i++){          
             int temp =Integer.MAX_VALUE;       
             int u = v;         
             for(int j = 1; j < nn; j++){       
                 if(!s[j] && dist[j] < temp&&dist[j]>0){           
                     u = j;                  
                     temp = dist[j];            
                 }         
             }             
             s[u] = true;  //找到了第一个并入S的节点      
             for(int j = 1; j <= nn; j++)         
                 if(!s[j] &&dist[u]+a[u][j]< dist[j]&& a[u][j] < Integer.MAX_VALUE)   
                         dist[j] =dist[u]+a[u][j];                                    
         }   
    }    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值