题目大意:有一系列相同的字符串,字符串被随机分成了两部分,要求还原字符串
解题思路:先计算出字符串的原长度,用最短的字符串长度加上最长的字符串长度,就是原字符串的长度,然后在进行回溯
#include<cstdio>
#include<cstring>
struct node{
char str[300];
int len;
};
node n[150];
int max, min,sum,count;
bool flag;
int vis[400];
void dfs(int cur,char end[1000]) {
if(cur == count) {
flag = true;
return ;
}
char temp[1000];
for(int i = 0; i < count; i++)
for(int j = 0; j < count; j++)
if(n[i].len + n[j].len == sum && !vis[i] && !vis[j] && i != j) {
memset(temp,0,sizeof(temp));
strcat(temp,n[i].str);
strcat(temp,n[j].str);
if(strcmp(temp,end) == 0) {
vis[i] = 1;
vis[j] = 1;
dfs(cur+2,end);
if(flag)
return