uva387 A Puzzling Problem

阅读: 评论:0

uva387	A Puzzling Problem

uva387 A Puzzling Problem

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

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 possiblen");}return 0;
}


本文发布于:2024-01-28 11:29:30,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064125727105.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Puzzling   Problem
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23