水牛♂ToTo

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
大家还记得这道题吗?这是我们集训第一次在吉大网络赛遇到的第一题。问题是,给你一系列的word,从中任选一个做为游戏的开始,选种后,以后选单词的原则就是首字母和上次所单词的尾字母相同,这样一直进行下去,知道找不到毛组要求的单词,这样选中的单词的长度和记为游戏的复杂度,求所有情况中复杂度的最大值。

开始的时候我的思路是:从中按顺序选择,如过选一的复杂度不够大就在选下一个,知道把所有的情况遍历一遍。也就是搜索把。当时没做出来,现在弥补一下,附上我的code:
此题链接:http://acm.jlu.edu.cn/joj/showproblem.php?pid=2391&off=2300


#include<iostream>
int max;
typedef struct{
    char ch[101];
    int f;
}martrix;
int find(martrix a[],int x,int n){
    a[x].f=0;
    char t=a[x].ch[strlen(a[x].ch)-1];
    int i;
    for(i=0;i<n;i++){
        if(a[i].f&&t==a[i].ch[0])
            return strlen(a[i].ch)+find(a,i,n);
    }
    return 0;
}
int main(){
    int n,i,j;
    martrix a[12];
    while(scanf("%d",&n)!=-1){
        i=0;
        while(i<n){
            scanf("%s",a[i].ch);
            a[i].f=1;
            i++;
        }
        int max=0,s;
        for(i=0;i<n;i++){
            s=strlen(a[i].ch)+find(a,i,n);
            if(s>max)
                max=s;
            for(j=0;j<n;j++)
                a[j].f=1;
        }
        printf("%d\n",max);
    }
}



posted on 2007-08-05 22:00  saintqdd  阅读(555)  评论(3)    收藏  举报