求大佬帮助
查看原帖
求大佬帮助
528243
wangxinlong_orange楼主2022/4/4 19:11
#include<iostream>
#include<string.h>
using namespace std;
int maxn;//最大值 
int n;//可用的单词数量 
int sum[21];//单词使用次数 
int lian[21][21];//单词连接部分长度 
string a[21];//每个单词 
char begin;//开头字母 

int choose1(int q,int p){//算出字符连接部分长度 
	int z=0;
	bool w=false;
	for(int i=0;i<a[q].size();i++){
		if(a[q][i]==a[p][0]){
			for(int i0=i,i1=0;i0<a[q].size(),i1<a[p].size();i0++,i1++){
				if(a[q][i0]==a[p][i1]){
					z++;
					w=true;
				}else{
					w=false;
					z=0;
					break;
				}
			}
			if(w) break;
		}
	}
	if(z>=a[p].size()) return 0;//如果被包住则输出0 
	else return z;
}

void choose2(int q,int z){//寻找最长 
	bool w=false;
	z=z+a[q].size();
	for(int i=1;i<=n;i++){
		if(lian[q][i]!=0&&sum[i]<2){
			w=true;
			sum[i]++;
			z=z-lian[q][i];
			choose2(i,z);
			z=z+lian[q][i];
			sum[i]--;
		}
	}
	if(!w){
		if(z>maxn) maxn=z;
	}
	return;
}

int main(){
	cin>>n;//输入 
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	cin>>begin;
	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			lian[i][j]=choose1(i,j);
		}
	}
	
	for(int i=1;i<=n;i++){
		if(a[i][0]==begin){
		    sum[i]++;
		    choose2(i,0);
		    sum[i]--;
		}
	}
	
	cout<<maxn;//输出 
	return 0;
}
2022/4/4 19:11
加载中...