zoukankan      html  css  js  c++  java
  • HDU1546

    题意:给定一些单词,前一个的尾和后一个的头相同时,才表示他们相连

    求最短路

    View Code
      1 #include<stdio.h>
      2 #include<string>
      3 #include<stdlib.h>
      4 #include<queue>
      5 #include<map>
      6 #include<algorithm>
      7 using namespace std;
      8 const int maxn = 1015;
      9 const int inf = INT_MAX;
     10 //map<string,int>mp;
     11 struct node{
     12     char s[ 505 ];
     13     int val;
     14 }a[ maxn ];
     15 struct Node{
     16     int u,val,next;
     17 }edge[ maxn*maxn ];
     18 int head[ maxn ],cnt;
     19 int dis[ maxn ],vis[ maxn ];
     20 int n;
     21 //int CNT;
     22 void init(){
     23     cnt=0;
     24     //CNT=1;
     25     //mp.clear();
     26     memset( head,-1,sizeof( head ));
     27 }
     28 void addedge( int a,int b,int c ){
     29     edge[ cnt ].u=b;
     30     edge[ cnt ].val=c;
     31     edge[ cnt ].next=head[ a ];
     32     head[ a ]=cnt++;
     33 }
     34 
     35 int bfs(){
     36     queue<int>q;
     37     while( !q.empty() )
     38         q.pop();
     39     for( int i=0;i<maxn;i++ ){
     40         dis[i]=inf;
     41         vis[ i ]=0;
     42     }
     43     int now,next;
     44     now=1;
     45     dis[now]=0;
     46     vis[now]=1;
     47     q.push(now);
     48     while( !q.empty() ){
     49         now=q.front(),q.pop();
     50         vis[now]=0;
     51         for( int i=head[now];i!=-1;i=edge[ i ].next ){
     52             next=edge[ i ].u;
     53             if( dis[next]>dis[now]+edge[i].val ){
     54                 dis[next]=dis[now]+edge[i].val;
     55                 if( vis[next]==0 ){
     56                     vis[next]=1;
     57                     q.push(next);
     58                 }
     59             }
     60         }
     61     }
     62     if( dis[n]==inf )
     63         return -1;
     64     else
     65         return dis[n];
     66     /*
     67     if( dis[get_first_num(a[n-1].s) ]!=inf||dis[get_last_num(a[n-1].s) ]!=inf )
     68         return min( dis[get_first_num(a[n-1].s) ],dis[get_last_num(a[n-1].s) ] );
     69     else 
     70         return -1;
     71     */
     72 }
     73 
     74 int judge( int i,int j ){
     75     int len=strlen(a[i].s);
     76     if( a[i].s[len-4]!=a[j].s[0] )
     77         return -1;
     78     if( a[i].s[len-3]!=a[j].s[1] )
     79         return -1;
     80     if( a[i].s[len-2]!=a[j].s[2] )
     81         return -1;
     82     if( a[i].s[len-1]!=a[j].s[3] )
     83         return -1;
     84     return 1;
     85 }
     86 
     87 int main(){
     88     while( scanf("%d",&n),n ){
     89         init();
     90         //int num1,num2;
     91         for( int i=1;i<=n;i++ ){
     92             scanf("%d%s",&a[i].val,a[i].s);
     93         }
     94         for( int i=1;i<=n;i++ ){
     95             for( int j=1;j<=n;j++ ){
     96                 if( i!=j ){
     97                     /*
     98                     num1=get_last_num(a[i].s);
     99                     num2=get_first_num(a[j].s);
    100                     if( num1==num2 ){
    101                         addedge( i,j,a[i].val );//mat[num1][num2]=a[i].val;
    102                     }
    103                     */
    104                     if( judge(i,j)==1 )
    105                         addedge( i,j,a[i].val );
    106                 }
    107             }
    108         }
    109         int flag=bfs();
    110         printf("%d\n",flag);
    111     }
    112     return 0;
    113 }

    开始想复杂了,以为要把每个单词拆开来。。。

    后来看了别人的才发现单词首尾相同即可表示i,j两个相连。。。。

    keep moving...
  • 相关阅读:
    让tomcat启动时,自动加载你的项目
    ssh整合 小例子
    hibernate入门(二)
    java引用问题(—)
    hibernate入门(-)
    IOC入门1
    百度知道回答的依赖注入
    spring
    ibatis 优点,未完版
    Data Structure Array: Sort elements by frequency
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2920800.html
Copyright © 2011-2022 走看看