您的位置:首页 > 编程语言 > Go语言

蓝桥-ALGO-18-单词接龙

2017-06-03 00:51 423 查看
ACM模版

描述



题解

暴力搜索 dfs!

代码

#include <iostream>
#include <string>

using namespace std;

const int MAXN = 22;

int n, len = 0;
string s[MAXN];
int vis[MAXN];

int charge(int left, int right)
{
int len = 0;
int llen = (int)s[left].length();
int rlen = (int)s[right].length();
for (int i = llen - 1; i > 0; i--)
{
int flag = 1, j = 0;
for (; i + j < llen && j < rlen; j++)
{
if (s[left][i + j] != s[right][j])
{
flag = 0;
break;
}
}
if (flag)
{
len = j;
break;
}
}
if (len == s[right].length())
{
return 0;
}
return len;
}

void dfs(int k, int l)
{
len = max(len, l);
for (int i = 0; i < n; i++)
{
if (vis[i] != 2)
{
int tmp = charge(k, i);
if (tmp)
{
vis[i]++;
dfs(i, l + (int)s[i].length() - tmp);
vis[i]--;
}
}
}
}

int main(int argc, const char * argv[])
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> s[i];
}

char a;
cin >> a;
for (int i = 0; i < n; i++)
{
if (s[i][0] == a)
{
vis[i]++;
dfs(i, (int)s[i].length());
vis[i]--;
}
}

cout << len << '\n';

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dfs