赞
踩
输入#2:1 输出#2:1
输入#3:1 输入#3:1 2
1 2
- //第一行输入整数n(n<=50),表示为该图形有几个点。
- //根据输入整数n,输入2*n-3条不相交的路径(所有的边和n-3条不相交的对角线)
- //仅一行,按字典序较小的顺序依次输出顶点的编号。
- //深度优先遍历,递归
- #include<iostream>
- #include<vector>
- using namespace std;
- vector<int> x;
- vector<bool>y;
- int flag = 1;
- void dfs(vector<vector<bool> > G, int V, int chu,int n) {
- y[chu] = 1;
- if (V == n&&G[chu][1]==1) { flag = 0; x[V] = chu; return; }
- for (int i = 1; i <= n; i++) {
- if (y[i] == 0 && G[chu][i] == 1)
- dfs(G, V + 1, i, n);
- }
- if(flag) y[chu] = 0;
- x[V] = chu;
- }
- int main() {
- int n,i,a,b;
- cin >> n;
- y.resize(n + 1, 0);
- x.resize(n + 1);
- vector<vector<bool> > G(n + 1, vector<bool>(n + 1));
- for (i = 1; i <= 2 * n - 3; i++) {
- cin >> a >> b;
- G[a][b] = G[b][a] = 1;
- }
- dfs(G, 1, 1,n);
- for (i = 1; i <= n; i++)
- cout << x[i];
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。