uva387A Puzzling Problem

来源:互联网 发布:jsp引入java代码 编辑:程序博客网 时间:2024/06/04 18:00

这道题相对比较简单,直接误脑暴搜。

pe了两次。。。。

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char n,block[5][4][4],info[5][2],area[4][4],ok;void dfs(int index){//printf("test%d",index);if(ok==1)return ;int i,j,t,l,flag=1;if(index==n){for(i=0;i<4;i++){for(j=0;j<4;j++)if(area[i][j]==0)flag=0;}if(flag==1){ok=1;for(i=0;i<4;i++){for(j=0;j<4;j++)printf("%d",area[i][j]);//if(i!=3)printf("\n");}}return ;}for(i=0;i<=4-info[index][0];i++){for(j=0;j<=4-info[index][1];j++){for(t=0;t<info[index][0];t++){for(l=0;l<info[index][1];l++){if(block[index][t][l]==1&&area[i+t][j+l]!=0)goto next;}}next:if(t==info[index][0]&&l==info[index][1]){for(t=0;t<info[index][0];t++){for(l=0;l<info[index][1];l++){if(block[index][t][l]==1)area[i+t][j+l]=index+1;}}dfs(index+1);for(t=0;t<info[index][0];t++){for(l=0;l<info[index][1];l++){if(block[index][t][l]==1)area[i+t][j+l]=0;}}}}}}int main(){int i,j,t,a,b,help=0;while(scanf("%d",&n)&&n){if(help!=0)printf("\n");help++;memset(area,0,16);ok=0;for(i=0;i<n;i++){scanf("%d %d",&a,&b);info[i][0]=a,info[i][1]=b;for(j=0;j<a;j++)for(t=0;t<b;t++)scanf("%1d",&block[i][j][t]);//%1d}dfs(0);if(ok==0)printf("No solution possible\n");}return 0;}


0 0
原创粉丝点击