题目链接:

https://vjudge.net/problem/UVA-387

思路:

非常有意思的拼图,深搜+回溯,

输出硬伤:除了第一次之外,每次先输空格,再输出结果,

以及可能给的数据拼不成4*4表格的情况。

 1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 using namespace std;
5 int vis[5][5];
6 int g[10010][5][5];
7 int maze[10010][2];
8 int sum=0;
9 int n;
10 int Find=0,Case=0;
11 void dfs(int cur){
12 if(cur==n+1){//
13 Find=1;
14 for(int i=0;i<4;i++){
15 for(int j=0;j<4;j++){
16 printf("%d",vis[i][j]);
17 }
18 printf("\n");
19 }
20 return;
21 }
22 if(Find) return;
23 for(int i=0;i<=4-maze[cur][0];i++){//4*4表格起点横坐标
24 for(int j=0;j<=4-maze[cur][1];j++){//4*4表格起点纵坐标
25 int flag=0;//判重
26 for(int p=0;p<maze[cur][0];p++){
27 for(int q=0;q<maze[cur][1];q++){
28 if(!flag&&!vis[i+p][j+q]&&g[cur][p][q]==1)
29 vis[i+p][j+q]=cur;
30 else if(!flag&&g[cur][p][q]==0)
31 continue;
32 else
33 flag=1;
34 }
35 }
36 if(!flag) dfs(cur+1);
37
38 if(Find) return;
39 for(int p=0;p<4;p++){//重新扫描一遍表格,将上一次的清零
40 for(int q=0;q<4;q++){
41 if(vis[p][q]==cur)
42 vis[p][q]=0;
43 }
44 }
45 }
46 }
47 }
48 void init(){
49 memset(vis,0,sizeof(vis));
50 memset(g,0,sizeof(g));
51 memset(maze,0,sizeof(maze));
52 sum=0;
53 Find=0;
54 Case++;
55 }
56 int main(int argc, char** argv) {
57 while(scanf("%d",&n)!=EOF){
58 if(n==0) break;
59 init();
60
61 for(int i=1;i<=n;i++){
62 scanf("%d %d",&maze[i][0],&maze[i][1]);
63 string line;
64
65 for(int j=0;j<maze[i][0];j++){
66 cin>>line;
67 for(int k=0;k<maze[i][1];k++){
68 g[i][j][k]=line[k]-'0';
69 sum+=g[i][j][k];//有可能根本拼不成
70 }
71 }
72 }
73 if(Case!=1) printf("\n");
74 if(sum==16)
75 dfs(1);
76 if(!Find) printf("No solution possible\n");
77 }
78 return 0;
79 }

UVA - 387 A Puzzling Problem的更多相关文章

  1. uva 387 A Puzzling Problem (回溯)

     A Puzzling Problem  The goal of this problem is to write a program which will take from 1 to 5 puzz ...

  2. UVa 101 The Blocks Problem Vector基本操作

    UVa 101 The Blocks Problem 一道纯模拟题 The Problem The problem is to parse a series of commands that inst ...

  3. uva387 - A Puzzling Problem

    A Puzzling Problem The goal of this problem is to write a program which will take from 1 to 5 puzzle ...

  4. 【暑假】[深入动态规划]UVa 1380 A Scheduling Problem

     UVa 1380 A Scheduling Problem 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=41557 ...

  5. UVA - 524 Prime Ring Problem(dfs回溯法)

    UVA - 524 Prime Ring Problem Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & % ...

  6. uva 10837 - A Research Problem(欧拉功能+暴力)

    题目链接:uva 10837 - A Research Problem 题目大意:给定一个phin.要求一个最小的n.欧拉函数n等于phin 解题思路:欧拉函数性质有,p为素数的话有phip=p−1; ...

  7. UVA 810 - A Dicey Problem(BFS)

    UVA 810 - A Dicey Problem 题目链接 题意:一个骰子,给你顶面和前面.在一个起点,每次能移动到周围4格,为-1,或顶面和该位置数字一样,那么问题来了,骰子能不能走一圈回到原地, ...

  8. UVA 10026 Shoemaker's Problem 鞋匠的难题 贪心+排序

    题意:鞋匠一口气接到了不少生意,但是做鞋需要时间,鞋匠只能一双一双地做,根据协议每笔生意如果拖延了要罚钱. 给出每笔生意需要的天数和每天的罚钱数,求出最小罚钱的排列顺序. 只要按罚款/天数去从大到小排 ...

  9. UVA 1640 The Counting Problem UVA1640 求[a,b]或者[b,a]区间内0~9在里面各个数的数位上出现的总次数。

    /** 题目:UVA 1640 The Counting Problem UVA1640 链接:https://vjudge.net/problem/UVA-1640 题意:求[a,b]或者[b,a] ...

随机推荐

  1. JavaSE03-运算符&分支语句

    1.运算符 1.1 算术运算符 1.1.1 运算符和表达式 运算符:对常量或者变量进行操作的符号 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式. 不同运算符连接的表达式 ...

  2. 【C#】DockPanelSuite 中 DockState.Document 状态下子窗体控件不显示的解决方案

    DockPanelSuite 是 Winform 中优秀的布局控件,但是这次使用过程中却出了个问题. 我遇到的问题是这样的,主窗体是通过 ShowDialog 显示的,子窗体的停靠状态为 DockSt ...

  3. html+css一些简单案例:爱心点击,盒子模型,2d动画

    canvas绘制爱心 效果预览 上代码 <!doctype html> <html> <head> <title>HTML5 Canvas爱心飘动动画特 ...

  4. Kubernetes弃用Docker后怎么办?

    本文转自Rancher Labs 近期,Kubernetes在其最新的Changelog中宣布,自Kubernetes 1.20之后将弃用Docker作为容器运行时.这一消息在云原生领域激起了不小的水 ...

  5. 刚入坑之C#《方法》解说

    说好的用一周时间学方法,我都快耽误成两周了.原因就是跟着传智播客的课程做了个飞行棋项目,想要梳理其中的方法却把自己绕晕了.那接下来我先说一下我学到方法的内容,在最后献上飞行器项目的代码,当然是传智播客 ...

  6. windows jupyter lab中.ipynb转中文PDF

    在jupyter lab中,File-Export Notebook as-Export Notebook to PDF,可以导出成PDF格式的文档,但在操作前需要安装些程序.1. 安装pandocA ...

  7. js中获取监听键盘事件

    <script type="text/javascript" language=JavaScript charset="UTF-8"> docume ...

  8. win10删除文件没有提示框

    步骤 右键 回收站, 显示删除确认对话框  

  9. CODING 静态网站服务升级,快速、稳定、高拓展!

    CODING 静态网站拥有强大的页面托管服务,目前已有数万开发者.设计师.产品经理.团队与企业使用 CODING 静态网站托管了他(她)们的个人网站.博客.企业与产品官网.在线文档等.CODING 静 ...

  10. MM-合作伙伴确定过程

    第一步:物料管理---采购---合作伙伴确定---合作伙伴角色---定义合作伙伴角色. 第二步:物料管理---采购---合作伙伴确定---合作伙伴角色---定义每个科目组适合的合作伙伴角色. 第三步: ...