• poj 2585 Window Pains 暴力枚举排列


    题意:

    在4*4的格子中有9个窗体,窗体会覆盖它之下的窗体,问是否存在一个窗体放置的顺序使得最后的结果与输入同样。

    分析:

    在数据规模较小且不须要剪枝的情况下能够暴力(思路清晰代码简单),暴力一般分为枚举子集(for(s=0;s<1<<n;++s))和枚举排列(next_permutation)。

    代码:

    //poj 2585
    //sep9
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int order[10];
    int a[8][8],tmp[8][8];
    char s[16];
    
    int main()
    {
    	while(1){
    		scanf("%s",s);
    		if(s[0]=='E')
    			break;
    		int i,j;
    		for(i=0;i<4;++i)
    			for(j=0;j<4;++j)
    				scanf("%d",&a[i][j]);	
    		int ok=0;
    		for(i=1;i<=9;++i)
    			order[i]=i;
    		do{
    			for(i=0;i<4;++i)	
    				for(j=0;j<4;++j)
    					tmp[i][j]=0;
    			for(i=1;i<=9;++i){
    				int t=order[i];
    				tmp[(t-1)/3][(t-1)%3]=t;
    				tmp[(t-1)/3][(t-1)%3+1]=t;
    				tmp[(t-1)/3+1][(t-1)%3]=t;
    				tmp[(t-1)/3+1][(t-1)%3+1]=t;	
    			}
    			int equal=1;
    			for(i=0;i<4&&equal;++i)
    				for(j=0;j<4&&equal;++j)
    					if(a[i][j]!=tmp[i][j])
    						equal=0;
    			if(equal==1){
    				ok=1;
    				break;
    			}
    		}while(next_permutation(order+1,order+10));
    		if(ok==0)
    			puts("THESE WINDOWS ARE BROKEN");
    		else
    			puts("THESE WINDOWS ARE CLEAN");
    		scanf("%*s");
    	}
    	return 0;
    } 


  • 相关阅读:
    分布式缓存
    分布式事务
    数据库系列-分库分表
    消息队列系列-简介
    JAVA系列-引用
    生产环境CPU占用过高分析
    技术书单(部分)
    GitHub的强大搜索功能简介
    VS2019 community版本下载Extension太慢解决方案
    Python2同时输出中文和变量时中文乱码
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7190479.html
Copyright © 2020-2023  润新知