JOJ 2391 words

ACM竞赛单词游戏题解
本文介绍了一道ACM竞赛中的单词游戏题目,通过构建结构体数组存储单词及其标志位,采用递归搜索的方式找到所有可能的游戏组合,并计算出最大复杂度。文章提供了完整的C++代码实现。
大家还记得这道题吗?这是我们集训第一次在吉大网络赛遇到的第一题。问题是,给你一系列的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);
    }
}



转载于:https://www.cnblogs.com/saintqdd/archive/2007/08/05/844098.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值