数据不大,直接枚举……嗯,然后就是,比如:1212和1212接龙之后是121212,而不是12121212,就这个注意的,代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char str[20][1001];
char tmp[1001];
int f[20][20];
int used[20];
int ans;
int n;
void srch(int k, int len)
{
int i;
if(len > ans){
ans = len;
}
used[k]++;
for(i = 0; i < n; i++){
if(f[k][i] > 0 && used[i] < 2){
srch(i, len + f[k][i]);
}
}
used[k]--;
}
int main(int argc, char **argv)
{
int i, j;
char *p, c;
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%s\n", str[i]);
}
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
strcpy(tmp, str[i]);
p = &tmp[strlen(tmp) - 1];
while(p != tmp){
if(*p == str[j][0] && strncmp(p, str[j], strlen(p)) == 0){
f[i][j] = strlen(str[j]) - strlen(p);
break;
}
p--;
}
}
}
scanf("%c", &c);
for(i = 0; i < n; i++){
if(str[i][0] == c){
srch(i, strlen(str[i]));
}
}
printf("%d\n", ans);
return 0;
}