zoukankan      html  css  js  c++  java
  • hdu4337(哈密尔顿回路模板)

    2012多校第四场,只做上了一道1007,哈密尔顿回路,

    找一条回路,经过每个顶点一次且仅一次。

    圆桌武士为模型,很庆幸我经过双连通->网络流->二分匹配->欧拉回路->哈密尔顿回路的思考过程想到了这个模型。

    因为Special Judge的答案不是很完备,所以导致我贡献2个WA,1个TLE,加上一下午的思考。。。

    4:45让重交一遍,幸运地过了。

    附AC代码:该代码也是哈密尔顿回路模板。

    View Code
    #include <string.h>
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    #define V 200
    int n,m;
    bool c[V][V];
    int x[V];
    bool flag[V];
    void hamilton()
    {
        int i, k;
        bool s[V];
        for(i = 0; i < n; i++)
        {
            x[i] = -1;
            s[i] = false;
        }
        k = 1;
        s[0] = true;
        x[0] = 0;
        while(k >= 0)
        {
            x[k]++;
            while(x[k] < n)
                if(!s[x[k]] && c[x[k - 1]][x[k]])
                    break;
                else
                    x[k]++;
            if((x[k] < n) && (k != n - 1))
            {
                s[x[k]] = true;
                k++;
            }
            else if((x[k] < n) && k == n - 1 && c[x[k]][x[0]])
            {
                break;
            }
            else
            {
                x[k] = -1;
                k--;
                s[x[k]] = false;
            }
        }
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        int a,b;
        while(cin >> n >> m){
            memset(c,0,sizeof(c));
            memset(flag,0,sizeof(flag));
            memset(x,0,sizeof(x));
            for(int i=0;i<m;i++){
                cin >> a >> b;
                c[a-1][b-1]=c[b-1][a-1]=true;
            }
    
            hamilton();
            bool f=0;
            for(int i=0;i<n;i++){
                flag[x[i]]=1;
            }
            for(int i=0;i<n;i++){
                if(!flag[i]) f=1;
            }
            if(f) cout <<"no solution" <<endl;
            else{
                for(int i=0;i<n;i++){
                    if(i==n-1) cout << x[i]+1 <<endl;
                    else cout << x[i]+1 <<" ";
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    iOS 进阶 第一天(0323)
    iOS 基础 第五天(0811)
    iOS 基础 第四天(0809)
    iOS 基础 第三天(0808)
    iOS 基础 第三天(0807)
    iOS 基础 第二天(0805)
    iOS 基础 第一天(0804)
    Mac 启用http-dav功能(WebDAV服务器)
    【转】phpmyadmin万能密码漏洞
    关于python文件操作 (转载)
  • 原文地址:https://www.cnblogs.com/markliu/p/2621906.html
Copyright © 2011-2022 走看看