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;
    }
  • 相关阅读:
    EntityFramework的安装
    利用Xml架构生成实体访问类
    C#生成XSD规范
    利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD
    在.net中序列化读写xml方法的总结
    MVP设计模式的实现
    c#万能视频播放器
    libavcodec是一款LGPL自由软件编解码库,用于视频和音频数据的编解码工作
    用C#实现多种方式播放Wav声音
    Using the G711 standard
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4792410.html
Copyright © 2011-2022 走看看