程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDOJ 2066 一個人的旅游

HDOJ 2066 一個人的旅游

編輯:C++入門知識

一個人的旅游,還是dijkstra,不過記得構造小草編號為0到鄰接城市的邊長度為0。

代碼


[cpp]
#include<iostream> 
using namespace std; 
const int INF=0x7fffffff; 
int dist[2005],map[2005][2005]; 
bool visit[2005]; 
int n; 
void init() 

     int i,j; 
     for( i=0; i<=n; i++){ 
          for( j=0; j<=n; j++) 
               if( !map[i][j]) 
                   map[i][j]=INF; 
          dist[i]=INF; 
          visit[i]=false; 
     } 

void Dijkstra(int s) 

    int mim,pt,i; 
    dist[s]=0; 
    pt=s; 
    while( true){ 
           visit[pt]=true; 
           for( i=0; i<=n; i++) 
                if( !visit[i]&&map[pt][i]!=INF) 
                    dist[i]=min(dist[i],dist[pt]+map[pt][i]); 
           mim=INF; 
           pt=-1; 
           for( i=0; i<=n; i++){ 
                if( !visit[i]&&mim>dist[i]){ 
                    mim=dist[i]; 
                    pt=i; 
                } 
           } 
           if( pt==-1) break;  
    }            

int main() 

    int s,t,d,i,j,x; 
    while( scanf("%d%d%d",&t,&s,&d)!=EOF){ 
           memset(map,0,sizeof(map)); 
           while( t--){ 
                  scanf("%d%d%d",&i,&j,&x); 
                  n=max(n,max(i,j)); 
                  if( map[i][j]==0||x<map[i][j]) 
                      map[i][j]=map[j][i]=x; 
           }  
           init(); 
           while( s--){ 
                  scanf("%d",&i); 
                  map[0][i]=map[i][0]=0; 
           } 
           Dijkstra(0); 
           x=INF; 
           while( d--){ 
                  scanf("%d",&t); 
                  if( x>dist[t]) 
                      x=dist[t]; 
           } 
           printf("%d\n",x);       
    }             
    return 0; 


作者:aacm1992

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved