zoj 2750 Idiomatic Phrases Game
来源:互联网 发布:oracle impdp表数据 编辑:程序博客网 时间:2024/04/29 17:54
/*zoj 2750 最短路题意:类似成语接龙~简单题,dijkstra轻松过。*/#include <iostream>#include <cstdio>#include <string.h>#include <limits.h>using namespace std;struct point{ int v; string head,tail;}p[1010];int map[1010][1010];int dist[1010];bool flag[1010];int dijkstra( int sta,int end,int n ){ int i,j,mini,mark; memset( flag,0,sizeof(flag) ); dist[sta]=0; flag[sta]=1; for( j=1;j<n;j++ ) { mini=INT_MAX; for( i=0;i<n;i++ ) { if( !flag[i] ) { if( map[sta][i]!=-1 ) { if( dist[i]==-1 || dist[i]>dist[sta]+map[sta][i] ) dist[i]=dist[sta]+map[sta][i]; } if( mini>dist[i] && dist[i]!=-1 ) { mini=dist[i]; mark=i; } } } if( mini==INT_MAX ) break; sta=mark; flag[sta]=1; } return dist[end];}int main(){ int n,i,j; string s; while( cin>>n && n ) { for( i=0;i<n;i++ ) { cin>>p[i].v>>s; p[i].head=s.substr( 0,4 ); p[i].tail=s.substr( s.size()-4,4 ); } memset( map,-1,sizeof(map) ); memset( dist,-1,sizeof(dist) ); for( i=0;i<n;i++ ) { for( j=0;j<n;j++ ) { if( j==i ) continue; if( p[i].tail==p[j].head ) map[i][j]=p[i].v; } } cout<<dijkstra( 0,n-1,n )<<endl; } return 0;}