zoukankan      html  css  js  c++  java
  • Gym 100518E Embedding Caterpillars

    构造+DFS

    很容易的可以构造两个,最后一个不会构造的话  DFS一下就可以了

    #include<iostream>
    #include<string>
    #include<string.h>
    #include<stdio.h>
    #include<queue>
    #include<iomanip>
    #include<algorithm>
    #include<map>
    using namespace std;
    
    int n;
    int G[205][205];
    int flag[205];
    int ans[205];
    int TOT,FF;
    
    void dfs(int now)
    {
        if(now==2*n+1)
        {
            for(int i=1; i<=2*n; i++) printf("%d ",ans[i]);
            FF=1;
            return;
        }
        if(now==1)
        {
            for(int i=1; i<=2*n; i++)
            {
                if(!flag[i])
                {
                    flag[i]=1;
                    ans[now]=i;
                    dfs(now+1);
                    if(FF) return;
                    flag[i]=0;
                }
            }
        }
        else if(now>=2&&now<=n+1)
        {
            for(int i=1; i<=2*n; i++)
            {
                if(!flag[i]&&!G[i][ans[now-1]])
                {
                    flag[i]=1;
                    ans[now]=i;
                    dfs(now+1);
                    if(FF) return;
                    flag[i]=0;
                }
            }
        }
        else if(now>=n+2&&now<=2*n)
        {
            for(int i=1; i<=2*n; i++)
            {
                if(!flag[i]&&!G[i][ans[now-n]])
                {
                    flag[i]=1;
                    ans[now]=i;
                    dfs(now+1);
                    if(FF) return;
                    flag[i]=0;
                }
            }
        }
    }
    
    int main( )
    {
        freopen("embedding.in","r",stdin);
        freopen("embedding.out","w",stdout);
        while(~scanf("%d",&n))
        {
            if(n==0) break;
            TOT=1;
            for(int i=1; i<=2*n; i++) ans[TOT]=i,TOT++;
            TOT--;
            for(int i=1; i<=TOT; i++) printf("%d ",ans[i]);
            printf("
    ");
            for(int i=1; i<=n; i++) G[ans[i]][ans[i+1]]=1,G[ans[i+1]][ans[i]]=1;
            for(int i=2; i<=n; i++) G[ans[i]][ans[i+n]]=1,G[ans[i+n]][ans[i]]=1;
            TOT=1; ans[TOT]=1; TOT++;
            for(int i=n+2; i<=2*n; i++) ans[TOT]=i,TOT++;
            ans[TOT]=n+1; TOT++; ans[TOT]=n; TOT++;
            for(int i=2; i<=n-1; i++) ans[TOT]=i,TOT++;
            TOT--;
            for(int i=1; i<=TOT; i++) printf("%d ",ans[i]);
            printf("
    ");
            for(int i=1; i<=n; i++) G[ans[i]][ans[i+1]]=1,G[ans[i+1]][ans[i]]=1;
            for(int i=2; i<=n; i++) G[ans[i]][ans[i+n]]=1,G[ans[i+n]][ans[i]]=1;
            FF=0;
            memset(flag,0,sizeof flag);
            dfs(1);
        }
        return 0;
    }
  • 相关阅读:
    Mac OS X各版本号的历史费用和升级关系
    Openlayers2中统计图的实现
    CentOS下Redisserver安装配置
    最小生成树算法
    机器学习---支持向量机(SVM)
    Android HttpURLConnection源代码分析
    Lighttpd1.4.20源代码分析 笔记 状态机之错误处理和连接关闭
    <html>
    【LeetCode-面试算法经典-Java实现】【059-Spiral Matrix II(螺旋矩阵II)】
    软件开发中的11个系统思维定律
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4792410.html
Copyright © 2011-2022 走看看