Puzzle (II) UVA - 519
题目链接:
https://vjudge.net/problem/UVA-519
思路:
剪枝+回溯
这个题巧妙的是他按照表格的位置开始搜索,也就是说表格是定的,他不断用已有的图片从(0,0)开始拼到(n-1,m-1)
剪枝的地方:
1.由于含'F'的面只能拼到边上,所以'F'的个数就是矩形的周长
2.含'O'的数目应该和含'I'的数目相等
3.可能会有很多重复的碎片,如果前面的碎片不能拼上去,那么后面重复的碎片也不能拼上去
坑点:
题目中明明说了只有15块碎片,但是将数组大小开到20却WA!!,说明碎片数目已经超过15个
#include <iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char maze[100][5];
int n,m;
int F=0,I=0,O=0;
int vis[100];
char loc[100][100][5];
int cmp(const void *a,const void *b){
return strcmp((char*)a,(char*)b);//strcmp()不能直接判断二维数组的大小
}
int check(int cur,int i,int j){//top, right, bottom, and left
if(i==0&&maze[cur][0]!='F') return 0;
if(i==n-1&&maze[cur][2]!='F') return 0;
if(j==0&&maze[cur][3]!='F') return 0;
if(j==m-1&&maze[cur][1]!='F') return 0;
if(i>0&&(maze[cur][0]+loc[i-1][j][2]!='I'+'O')) return 0;
if(j>0&&(maze[cur][3]+loc[i][j-1][1]!='I'+'O')) return 0;
return 1;
}
int dfs(int x,int y,int cnt){
if(cnt==n*m){//
return 1;
}
char tmp[5]={0};
for(int k=0;k<n*m;k++){
if(!vis[k]&&(strcmp(tmp,maze[k])!=0)&&check(k,x,y)){
strcpy(tmp,maze[k]);
strcpy(loc[x][y],maze[k]); vis[k]=1;
if(dfs((cnt+1)/m,(cnt+1)%m,cnt+1)) return 1; vis[k]=0;
}
}
return 0;
}
void init(){
memset(maze,0,sizeof(maze));
memset(vis,0,sizeof(vis));
memset(loc,0,sizeof(loc));
F=0,I=0,O=0;
}
int main(int argc, char** argv) {
while(scanf("%d %d",&n,&m)!=EOF){
if(n==0&&m==0) break;
init(); for(int i=0;i<n*m;i++){
scanf("%s",maze[i]);
for(int j=0;j<4;j++){
if(maze[i][j]=='F') F++;
else if(maze[i][j]=='I') I++;
else if(maze[i][j]=='O') O++;
}
}
if(F!=(m+n)*2||I!=O){
printf("NO\n");
}else{
qsort(maze[0],n*m,sizeof(maze[0]),cmp);//q int Find=dfs(0,0,0);
if(Find) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}
Puzzle (II) UVA - 519的更多相关文章
- GCD - Extreme (II) UVA - 11426(欧拉函数!!)
G(i) = (gcd(1, i) + gcd(2, i) + gcd(3, i) + .....+ gcd(i-1, i)) ret = G(1) + G(2) + G(3) +.....+ G(n ...
- GCD - Extreme (II) UVA - 11426 数学
Given the value of N , you will have to nd the value of G . The de nition of G is given below: G = i ...
- CodeForces 303B Rectangle Puzzle II
题意: 给定一个靠着坐标轴长为n,宽为m的矩形和 矩形中的一个点A,求在这个矩形内部一个 长宽比为a/b的小矩形,使这个小矩形的长宽尽量大使点A在小矩形内部,并且点A尽量靠近小矩形的中心 CF的思维题 ...
- Super Poker II UVA - 12298 FFT_生成函数
Code: #include<bits/stdc++.h> #define maxn 1000000 #define ll long long #define double long do ...
- GCD - Extreme (II) UVA - 11426 欧拉函数_数学推导
Code: #include<cstdio> using namespace std; const int maxn=4000005; const int R=4000002; const ...
- F - GCD - Extreme (II) UVA - 11426
Given the value of N, you will have to find the value of G. The definition of G is given below:
- GCD - Extreme (II) UVA - 11426 欧拉函数与gcd
题目大意: 累加从1到n,任意两个数的gcd(i,j)(1=<i<n&&i<j<=n). 题解:假设a<b,如果gcd(a,b)=c.则gcd(a/c,b ...
- KUANGBIN带你飞
KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题 //201 ...
- LeetCode All in One题解汇总(持续更新中...)
突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...
随机推荐
- 【ubantu下安装python3.6】
Ubuntu16.04默认安装了Python2.7和3.5 请注意,系统自带的python千万不能卸载! 输入命令python
- matplotlib的学习10-Contours 等高线图
import matplotlib.pyplot as plt import numpy as np ''' 画等高线 数据集即三维点 (x,y) 和对应的高度值,共有256个点. 高度值使用一个 h ...
- angular8
@Component 装饰器告诉Angular , AppComponent 类是一个组件,装饰器的属性用于配置该组件的应用方式. selectot 属性告诉Angular如何在HTML文档中应用该组 ...
- 7. 丈母娘嫌我不懂K8s的Service概念,让我去面壁
文章目录 怎么跟你说 Service的出现,就是 解决ip不固定的问题 ,怎么解决呢 ? 听小刘慢慢道来 当Pod宕机后重新生成时,其IP等状态信息可能会变动,Service会根据Pod的Label对 ...
- 超简单的 Docker部署 SpringBoot项目 步骤
很久之前就用过,一直没有好好写篇博客,今天就总结一下 创建一个 SpringBoot项目 创建一个SpringBoot项目并打成jar包,结构如图 编写 Dockerfile文件 FROM java: ...
- MySQL忘记密码了怎么解决
前言:在不考虑到原来用户对关联数据库的授权问题的情况下,有以下三种思路解决 #1.登录状态下修改 说明:在登录状态的话,直接使用命令修改密码就行了 mysql> use mysql; mysql ...
- 类似818tu.c微信小说分销系统设计之多公众号网页授权自动登录源码分享
/** 转载请保留原地址以及版权声明,请勿恶意修改 * 作者:杨浩瑞 QQ:1420213383 独立博客:http://www.yxxrui.cn * [后台]http://xiaoshuo. ...
- 安装篇五:安装MySQL(5.6.38版本)
#1.MySQL安装 #1.准备环境 # No1:关闭:(iptables)selinux # No2:下载好安装包(这里使用 mysql-5.6.38.tar.gz 包安装) # No3:安装依赖包 ...
- Windows Server 2016介绍与安装
版本介绍 Windows Server 2016 Essentials edition Windows Server 2016 Essentials版是专为小型企业而设计的.它对应于Windows S ...
- 开发规范(二)如何写单元测试 By 阿里