zoukankan      html  css  js  c++  java
  • 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]={''},end[5]={''};
    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
    ",end);
    57             if(!g[pre])g[pre]=num++;
    58             if(!g[end])g[end]=num++;
    59         //    printf("%d %d
    ",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
    ",start,endd);
    66         
    67         if(road[start][endd]==inf)
    68         {
    69             printf("-1
    ");
    70         }
    71         else printf("%d
    ",road[start][endd]);
    72     }
    73     return 0;
    74 }
    View Code
  • 相关阅读:
    CodeForces
    CodeForces
    sort自定义cmp函数
    The 2015 China Collegiate Programming Contest Sudoku
    G
    docker
    在容器内获取Pod信息(Downward API)
    k8s Pod定义详解
    Pod和容器的生命周期管理
    GoAccess日志分析工具
  • 原文地址:https://www.cnblogs.com/fqfzs/p/9988612.html
Copyright © 2011-2022 走看看