/*
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;
}
zoj 2750 Idiomatic Phrases Game
最新推荐文章于 2018-10-09 09:48:00 发布
