全排列一个个试,毫无算法。。。复杂度贼高。。
#include<iostream>
#include <string>
using namespace std;
int book[100], num=4, cou=1;
char *word[4] = { "ab","bc","cd","bf" };
bool dfs(int num, char ** arr,char tail)
{
if (cou == num )
return true;
for (int i = 0; i < num; ++i)//一个个当首单词
{
if (book[i] == 0 && arr[i][0] == tail)
{
book[i] = 1;
cou++;
if (dfs(num, arr, arr[i][strlen(arr[i]) - 1]))
return true;
book[i] = 0;
cou--;
}
}
return false;
}
int canArrangeWords(int num, char ** arr)
{
if (num == 1)
return 1;
for (int i = 0; i < num; ++i)//一个个当首单词
{
book[i] = 1;
bool zq=dfs(num,arr,arr[i][strlen(arr[i])-1]);
book[i] = 0;
cou = 1;//链子里只有第一个单词了
if (zq)
return 1;
}
return -1;
}
int main()
{
int res = canArrangeWords(num, word);
cout << res << endl;
system("pause");
return 0;
}