讨论 / 单词接龙为什么两个点不过呀!求大神解。
彤歌 2016-04-09 08:45:36
点我顶贴 收藏 删除
#include<stdio.h>

#include<string.h>

#include<iostream>

using namespace std;

const int N=50,M=10001;

char s[N][M];

char ch;

int flag[N]={0};

int n;

int _sum=0;

int ans=0;

int f=0;

bool check(int x,int y){

int i,j;

int lx=strlen(s[x]);

int ly=strlen(s[y]);

f=0;

i=0;

j=0;

for(int k=1;k<min(lx,ly);k++){

int f1=1;

for(i=lx-k,j=0;i<lx,j<k;i++,j++){

if(s[x][i]!=s[y][j]){

f1=0;

break;

}

}

if(f1==1){

f=k;

}

}

if(f==0) return false;

if((f==lx&&lx<ly)||(f==ly&&ly<lx)) return false;

_sum=ly-f;

return true;

}

void DFS(int t,int k,int sum){

if(sum>ans){

ans=sum;

}

for(int i=1;i<=n;i++){

if(flag[i]<2&&check(k,i)){

flag[i]++;

DFS(t+1,i,sum+_sum);

flag[i]--;

}

}

return;

}

int main(){

int i;

scanf("%d",&n);

for(i=1;i<=n;i++){

scanf("%s\n",s[i]);

}

scanf("%c",&ch);

for(i=1;i<=n;i++)

if(s[i][0]==ch){

flag[i]++;

DFS(0,i,strlen(s[i]));

flag[i]--;

}

printf("%d",ans);

//while(1);

return 0;

}

/*

3

cheat

touch

at

a

*/

#1 lyp2019@2017-04-18 06:12:38
回复 删除
#include<iostream>

#include<cmath>

#include<cstring>

#include<iomanip>

#2 LisaXu@2018-02-21 18:47:31
回复 删除
HELP!Who 有c的?求相助!

查看更多回复
提交回复