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;
    }
    

      

  • 相关阅读:
    MAC OS系统替换homebrew使用阿里云的镜像源
    Javascript 交换两个变量的值
    Vue 中的 ref $refs
    Bluetooth M590 mouse problem Ubuntu
    Ubuntu 蓝牙鼠标的问题
    视频分享
    Vue项目中的文件/文件夹命名规范
    js打印div指定区域内容
    IntelliJ IDEA 配置
    idea安装
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4817702.html
Copyright © 2011-2022 走看看