全排列一个个试,毫无算法。。。复杂度贼高。。
#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;
}