成语接龙,找每个单词都需要一点时间,问最少的时间
把字符串用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]={'