只需要记录每个单词的首尾字母,把每个字母当做图中的点,两个字母出现在一个单词首尾当做一条有向边,这样就成了求图中是否存在欧拉回路,即能遍历图中所有的边而且不重复。
有向图中存在欧拉回路的条件是:底图是连通的,所有点的入度=出度、或者一个点出度=入度+1(开始点),一个点入度=出度+1(结束点)。
无向图中存在欧拉回路的条件是:所有点的边是偶数、有两个点的边是奇数
开始在对图进行dfs的时候,把点的数目当成了n,一直WR。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<string>
#include<map>
#include<set>
#include<algorithm>
#include<vector>
#include<stack>
#include<sstream>
#define ll long long
using namespace std;
/**********************************************************/
const int M_NUM_MAX = 100000+10;
const int M_INT_MAX = 0x7fffffff;
const double M_DBL_MAX = 1.7976931348623158e+308;
const double M_DBL_MIN = 2.2250738585072014e