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