zoukankan      html  css  js  c++  java
  • sgu101Domino

    弱的一笔啊!!

    都知道这题是欧拉路径都还Wa了那么久。。。伤心!

    原来欧拉路径的压栈一定要在dfs()之后压。。。

    这题就是将牌骨的数字看做点,把牌看做连接两点的边。。。这样就成了欧拉路了

    // File Name: 1002.cpp
    // Author: zlbing
    // Created Time: 2013/2/24 11:39:49
    
    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<cstdlib>
    #include<cstdio>
    #include<set>
    #include<map>
    #include<vector>
    #include<cstring>
    #include<stack>
    #include<cmath>
    #include<queue>
    using namespace std;
    #define CL(x,v); memset(x,v,sizeof(x));
    #define INF 0x3f3f3f3f
    #define MAXN 20005
    
    struct Edge{
        int from,to;
    };
    vector<int>G[MAXN];
    vector<Edge>edges;
    int A[MAXN];
    vector<int> E;
    int vis[MAXN];
    void dfs(int u)
    {
        for(int i=0;i<G[u].size();i++)
        {
            int m=G[u][i];
            Edge& e=edges[G[u][i]];
            int v=e.to;
            if(vis[m])continue;
            vis[m]=vis[m^1]=1;
            //E.push_back(m);把这句写在这里 Wa了好久。。。原来我一直没明白欧拉路的原理..
            dfs(v);
            E.push_back(m);
        }
    }
    
    int main(){
        int n;
        while(~scanf("%d",&n))
        {
            int a,b;
            for(int i=0;i<7;i++)G[i].clear();
            edges.clear();
            E.clear();
            CL(A,0);
            int S=0;
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&a,&b);
                A[a]++,A[b]++;
                edges.push_back((Edge){a,b});
                int m=edges.size();
                G[a].push_back(m-1);
                edges.push_back((Edge){b,a});
                m=edges.size();
                G[b].push_back(m-1);
            }
            for(int i=0;i<7;i++)
                if(A[i]){
                    S=i;break;
                }
            CL(vis,0);
            int cnt=0;
            for(int i=0;i<7;i++)
                if(A[i]%2)
                {
                    S=i;cnt++;
                }
            if(!(cnt==0||cnt==2)){
                printf("No solution\n");
                continue;
            }
            dfs(S);
            if(E.size()!=n)
            {
                printf("No solution\n");
                continue;
            }
            for(int i=E.size()-1;i>=0;i--){
                printf("%d ",(E[i]/2)+1);
                if(E[i]%2)printf("-\n");
                else printf("+\n");
            }    
        }
        return 0;
    }
  • 相关阅读:
    Datatables 在asp.net mvc
    VS Code开发调试.NET Core
    领域模型中的用户设计
    MVC数组模型绑定
    Java RMI(远程方法调用) 实例与分析 (转)
    oracle转mysql总结(转)
    Windows远程桌面连接Ubuntu 14.04 (转)
    oracle转Mysql中,varchar2(10)和number应该转换为什么类型? (转)
    MySQL与Oracle的语法区别详细对比 (转)
    python购物淫秽数据分析(2)
  • 原文地址:https://www.cnblogs.com/arbitrary/p/2936887.html
Copyright © 2011-2022 走看看