题目链接:

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. Idea+Git+GitHub图文教程,一篇教程帮你搞定

    导语 该文章主要记录如何在GitHub上创建远程仓库.如何创建本地仓库并把代码提交到GitHub.如何创建分支以及分支合并到主干的操作. 一.在GitHub上创建远程仓库 (前提:已经注册过githu ...

  2. Linux安装Mycat1.6.7.4并实现Mysql数据库读写分离简单配置

    1. Mycat简介 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一 ...

  3. 如何自定义Kubernetes资源

    目前最流行的微服务架构非Springboot+Kubernetes+Istio莫属, 然而随着越来越多的微服务被拆分出来, 不但Deploy过程boilerplate的配置越来越多, 且繁琐易错, 维 ...

  4. 关于Java中的String类知识点小总结

    Java中的String类知识点 前言 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 如何创建字符串 最简单的方式 String str = "he ...

  5. 使用gitlab-runner本地验证.gitlab-ci.yml

    背景 在gitlab上配置新项目的CI的时候,需要编写项目的 .gitlab-ci.yml 文件. 每次修改 .gitlab-ci.yml 文件之后都要执行git push让GitLab去构建来验证当 ...

  6. 关于BAPI_ACC_DOCUMENT_POST解读

    BAPI_ACC_DOCUMENT_POST是SAP ERP提供生成会计凭证的标准BAPI,这个BAPI可以用到多种场景生成会计凭证,实际项目中一般情况下更多的是生成应收和应付的会计凭证,分别对应客户 ...

  7. MQTT协议 局域网和广域网 云服务器和虚拟主机、VPS SSH和FTP、SFTP

     MQTT协议 MQTT协议就很好的解决了coap存在的问题.MQTT协议是由IBM开发的即时通讯协议,相比来说比较适合物联网场景的通讯协议.MQTT协议采用发布/订阅模式,所有的物联网终端都通过TC ...

  8. C# 生成6位短信验证码

    1 private string VerifyCode() 2 { 3 Random random = new Random(); 4 return random.Next(100000, 99999 ...

  9. 英特尔® 图形性能分析器(Intel® GPA)

    英特尔图形性能分析器概述 英特尔 GPA 是一套软件工具,它能提供平台级游戏性能分析功能,优化应用性能. 英特尔 GPA 包含以下组件: 英特尔 GPA 监控器 - 将英特尔 GPA 连接至应用(处于 ...

  10. Js HTML DOM动画

    基础页面 为了演示如何通过 JavaScript 来创建 html 动画,我们将使用一张简单的网页: 实例 我的第一部 JavaScript 动画 我的动画在这里. 创建动画容器 所有动画都应该与容器 ...