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;}

原创粉丝点击