hdu1546Idiomatic Phrases Game(floyd+map)

传送门

成语接龙,找每个单词都需要一点时间,问最少的时间

把字符串用map处理成数字编号,之后用floyd

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 map<string,int>g;
 4 int road[1005][1005];
 5 int num=0;
 6 const int inf=0x3f3f3f3f;
 7 void floyd()
 8 {
 9     for(int k=0;k<num;k++)
10     {
11         for(int i=0;i<num;i++)
12         {
13             for(int j=0;j<num;j++)
14             {
15                 road[i][j]=road[i][j]>road[i][k]+road[k][j]?road[i][k]+road[k][j]:road[i][j];
16             //    cout<<i<<" "<<j<<" "<<road[i][j]<<endl;        
17             }
18         }
19     }
20 }
21 void init()
22 {
23     for(int i=0;i<1005;i++)
24     {
25         for(int j=0;j<1005;j++)
26         {
27             road[i][j]=inf;
28         }
29         road[i][i]=0;
30     }
31 }
32 int main()
33 {
34     int n;
35     while(~scanf("%d",&n),n)
36     {
37         
38         num=0;g.clear();init();
39         int start=0,endd=0;
40         for(int i=0;i<n;i++)
41         {
42             int t;char s[1000];
43             scanf("%d %s",&t,s);
44             char pre[5]={'\0'},end[5]={'\0'};
45             for(int j=0;j<4;j++)
46             {
47                 pre[j]=s[j];
48                 
49             }
50             //printf("%s ",pre);
51             int temp=0;
52             for(int j=strlen(s)-4;j<strlen(s);j++)
53             {
54                 end[temp++]=s[j];
55             }
56         //    printf("%s\n",end);
57             if(!g[pre])g[pre]=num++;
58             if(!g[end])g[end]=num++;
59         //    printf("%d %d\n",g[pre],g[end]);
60             if(i==0)start=g[pre];
61             if(i==n-1)endd=g[pre];
62             if(t<road[g[pre]][g[end]])road[g[pre]][g[end]]=t;
63         }
64         floyd();
65     //    printf("%d %d\n",start,endd);
66         
67         if(road[start][endd]==inf)
68         {
69             printf("-1\n");
70         }
71         else printf("%d\n",road[start][endd]);
72     }
73     return 0;
74 }
View Code

猜你喜欢

转载自www.cnblogs.com/fqfzs/p/9988612.html