单词接龙:一个单词的头和上一个单词的尾相同
如:ab---ba
第一个单词的头没有要求
#include<bits/stdc++.h>//单词接龙
using namespace std;
string b[100001];
string l[100001];//当前龙的内容
int c[100001];//每个单词是否用了
int sum;//当前已经接到第几个位置
int lenb;//所有单词的数量
int n;//需要龙的长度
int m;//需要多少条龙
int ol;//第几条龙
bool f=false;//第ol条龙是否接成功了
void dfs(char last) { //上一个龙的结尾
if(sum==n+1) {
cout<<"第"<<++ol<<"条龙:"<<endl;
for(int i=1; i<n; i++) {
cout<<l[i]<<"---";
}
cout<<l[n];
f=true;
cout<<endl;
return;
}
for(int i=1; i<=lenb; i++) {
if(c[i]==1) {
continue;
}
if(b[i][0]==last||last=='!') {
c[i]=1;
l[sum]=b[i];
sum++;
dfs(b[i][b[i].size()-1]);
sum--;
if(f==true) {
return;
}
c[i]=0;
}
}
}
void change_first() {
sum=1;
f=false;
}
int main() {
cout<<"输入: @end 结束输入"<<endl;
string a;
while(cin>>a) {
if(a=="@end")
break;
b[++lenb]=a;
}
cout<<endl;
cout<<"请输入龙的长度:";
cin>>n;
cout<<endl;
cout<<"请输入需要多少条龙:";
cin>>m;
cout<<endl;
for(int i=1; i<=m; i++) {
change_first();
dfs('!');
}
if(ol==m) {
cout<<endl;
cout<<"任务成功!"<<endl;
} else {
cout<<endl;
cout<<"任务失败!"<<endl;
}
int wait;
cin>>wait;
return 0;
}