zoukankan      html  css  js  c++  java
  • UVA-12113 Overlapping Squares (回溯+暴力)

    题目大意:问能不能用不超过6张2x2的方纸在4x4的方格中摆出给定的图形?

    题目分析:暴力枚举出P(9,6)种(最坏情况)方案即可。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    
    int vis[10];
    char mp[8][15],p1[8][15];
    
    bool judge()
    {
        for(int i=0;i<5;++i)
            for(int j=0;j<9;++j)
                if(mp[i][j]!=p1[i][j])
                    return false;
        return true;
    }
    
    bool dfs(int step)
    {
        if(judge())
            return true;
    
        if(step>=6)
            return false;
    
        char p2[6][10];
        for(int i=0;i<5;++i)
            for(int j=0;j<9;++j)
                p2[i][j]=p1[i][j];
    
        for(int i=0;i<9;++i){
            if(vis[i])
                continue;
    
            vis[i]=1;
            int r=i/3,c=2*(i%3)+1;
            p1[r][c]=p1[r][c+2]=p1[r+2][c]=p1[r+2][c+2]='_';
            p1[r+1][c-1]=p1[r+2][c-1]=p1[r+1][c+3]=p1[r+2][c+3]='|';
            p1[r+1][c]=p1[r+1][c+1]=p1[r+1][c+2]=p1[r+2][c+1]=' ';
    
            if(dfs(step+1))
                return true;
    
            vis[i]=0;
            for(int i=0;i<5;++i)
                for(int j=0;j<9;++j)
                    p1[i][j]=p2[i][j];
        }
    
        return false;
    }
    
    int main()
    {
        int cas=0;
        while(1)
        {
            for(int i=0;i<5;++i){
                gets(mp[i]);
                if(mp[i][0]=='0')
                    return 0;
            }
            printf("Case %d: ",++cas);
    
            for(int i=0;i<5;++i)
                for(int j=0;j<9;++j)
                    p1[i][j]=' ';
    
            memset(vis,0,sizeof(vis));
            if(dfs(0))
                printf("Yes
    ");
            else
                printf("No
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    url末尾的斜杠作用
    awk 工具可以很灵活地对文本进行处理,这里的 awk '{print $2}'是指第二列的内容,是运行的程序 ID。 杀死指定进程
    nil和空切片
    WaitGroup源码设计,
    2
    t
    Go内置的定时器
    分布式定时器
    1 2 交换
    order by 1 DESC 2 desc
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4817702.html
Copyright © 2011-2022 走看看