题意: 用50种珠子, 每种珠子两头颜色不同, 当两个珠子的有一头颜色相同时, 这一头可以连起来。 给点一些珠子, 看能否连成项链。
思路:其实就是欧拉回路(项链)。 用并查集判断图的连通性 + 判断度数合法性, 图就存在。 然后用DFS输出路径。
又想到一种。二维数组G不再表示G[u][v] u v之间边的存在性, 而是表示边数。 这样只要走一条减一条, 统计走过的条数,最后等于edge, 则图就连通了。走的时候把路径u v压入path栈。 代码在最下面。
算法复杂度:
代码:
#include <cstdio>
#include <cstring>
using namespace std;
#define MAX_N 55
int deg[MAX_N];
int father[MAX_N];
int G[MAX_N][MAX_N];
int edge, vertex;