ACM: Gym 100935G Board Game - DFS暴力搜索
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Description
Statements
Feras bought to his nephew Saleem a new game to help him learning calculating. The game consists of a board with 4 rows and 4 columns with 16 cubes. Every cube has a number from 1 to 16. Let's define the power of a column as the sum of its elements. In the same way, the power of a row is the sum of its elements. Saleem should arrange the cubes in the board such that the power of all columns and all rows are equal. To make the game easier, the nice uncle, Feras, will help him arranging 7 cubes, and Saleem should arrange the rest of the cubes.
Input
Your program will be tested on one or more test cases. The first line of the input will be a single integer T, the number of test cases (1 ≤ T ≤ 100). Then the test cases. Each test case has four lines containing four integers. The j-th number in the i-th line describes the cell (i,j) of the board. If the number is -1 then the cell is empty and you have to fill it, otherwise, uncle Feras has already filled this cell.
Output
For each test case print a line in the following format: "Case c:" where c is the test case number starting from 1 then print the board in four lines every line has four numbers separated by space. If there is more than one solution print the solution that has the smallest order (See the notes below).
Sample Input
1
-1 -1 -1 -1
-1 -1 -1 -1
-1 5 13 12
3 8 9 14
Case 1:
11 6 10 7
16 15 2 1
4 5 13 12
3 8 9 14
Hint
in the sample input there is more than one solution:
Solution1:
16 15 2 1
11 6 10 7
4 5 13 12
3 8 9 14
Solution2:
11 6 10 7
16 15 2 1
4 5 13 12
3 8 9 14
but we select solution2 because it has the smallest order when we write the rows in one line.
Solution1: 16 15 2 1 11 6 10 7 4 5 13 12 3 8 9 14
Solution2: 11 6 10 7 16 15 2 1 4 5 13 12 3 8 9 14
/*/
这个题目和以前做过的一个DFS数独的题目很像,还要更简单; 直接DFS暴力+ 枚举就行了 AC代码:
/*/
#include"algorithm"
#include"iostream"
#include"cstring"
#include"cstdlib"
#include"cstdio"
#include"string"
#include"vector"
#include"queue"
#include"cmath"
using namespace std;
typedef long long LL ;
#define memset(x,y) memset(x,y,sizeof(x))
#define memcpy(x,y) memcpy(x,y,sizeof(x))
const int MX=5; int mps[MX][MX];
int mp[MX][MX];
bool num[20],flag; void init() {
memset(mp,0);
memset(num,0);
memset(mps,0);
flag=0;
} bool check() {
int sum=0;
for(int i=0; i<4; i++) {
sum+=mp[0][i];
for(int j=0; j<4; j++) {
if(mp[i][j]==-1)return 0;
}
}
for(int i=0; i<4; i++) {
if(sum!=mp[0][i]+mp[1][i]+mp[3][i]+mp[2][i])return 0;
if(sum!=mp[i][0]+mp[i][1]+mp[i][2]+mp[i][3])return 0;
}
return 1;
} void DFS(int x,int y) {
if(flag)return ;
if(mps[x][y]==-1) {
for(int i=1; i<=16; i++) {
if(num[i]||flag)continue;
mp[x][y]=i;
num[i]=1;
if(y<3) DFS(x,y+1);
else if(x<3) DFS(x+1,0);
else {
if(check())flag=1;
num[i]=0;
return;
}
num[i]=0;
}
} else {
if(y<3) DFS(x,y+1);
else if(x<3) DFS(x+1,0);
else {
if(check()) flag=1;
return ;
}
}
} int main() {
int T;
scanf("%d",&T);
for(int time=1; time<=T; time++) {
init();
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
scanf("%d",&mps[i][j]);
if(mps[i][j]!=-1) {
num[mps[i][j]]=1;
}
}
}
memcpy(mp,mps);
DFS(0,0);
printf("Case %d:\n",time);
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
printf("%d%c",mp[i][j],j==3?'\n':' ');
}
}
}
return 0;
}
ACM: Gym 100935G Board Game - DFS暴力搜索的更多相关文章
- hdu 1427 速算24点 dfs暴力搜索
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem De ...
- [HDU 1427]速度计算24点(DFS暴力搜索)
主题连接: pid=1427">http://acm.hdu.edu.cn/showproblem.php?pid=1427 思路:简单的DFS.dfs(sum,next,p)表 ...
- UVALive 5107 dfs暴力搜索
题目链接:A hard Aoshu Problem DES:给三个字符串,包含的字符是A-E范围内的.长度都不超过8.每个字符可以而且只可以匹配一个数字.两个字符不能匹配相同的数字.前两个式子之间可以 ...
- UVALive 5844 dfs暴力搜索
题目链接:UVAive 5844 Leet DES:大意是给出两个字符串.第一个字符串里的字符可以由1-k个字符代替.问这两个字符串是不是相等.因为1<=k<=3.而且第一个字符串长度小于 ...
- 洛谷P1019——单词接龙(DFS暴力搜索)
https://www.luogu.org/problem/show?pid=1019#sub 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母, ...
- poj 3050 Hopscotch DFS+暴力搜索+set容器
Hopscotch Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2774 Accepted: 1940 Description ...
- ACM 暴力搜索题 题目整理
UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vec ...
- ACM: FZU 2107 Hua Rong Dao - DFS - 暴力
FZU 2107 Hua Rong Dao Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I6 ...
- Gym 100650H Two Ends DFS+记忆化搜索
Problem H: Two EndsIn the two-player game “Two Ends”, an even number of cards is laid out in a row. ...
随机推荐
- jquery学习笔记----jquery相关的文档
http://tool.oschina.net/apidocs/apidoc?api=jquery http://www.w3school.com.cn/jquery/jquery_ref_event ...
- css控制文字显示长度,超过用省略号替代
.line_text { width:200px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } <span cl ...
- Delphi中DLL的创建和使用
参考:http://blog.csdn.net/ninetowns2008/article/details/6311663 结合这篇博客:http://www.cnblogs.com/xumenger ...
- Centos6.5里安装Erlang 并安装riak
一.Erlang安装: 1 首先进入www.erlang.org 下载页面,下载otp_src_17.5.tar.gz. IT网,http://www.it.net.cn 2 解压缩:tar -xzv ...
- Oracle 【IT实验室】数据库备份与恢复之一:exp/imp(导出与导入&装库与卸库)
1.1 基本命令 1. 获取帮助 $ exp help=y $ imp help=y 2. 三种工作方式 (1)交互式方式 $ exp // 然后按提示输入所需要的参数 ...
- string、math、random、datetime类
1.string类 变量.Replace("想要替换掉的字符或字符串","转换后的字符或字符串");//替换 练习:判断邮箱格式是否正确 ...
- Android 弹出对话框Dialog充满屏幕宽度
final View view = LayoutInflater.from(context).inflate(layoutId, null); final Dialog dialog = new Di ...
- JMeter处理jdbc请求后的响应结果
JMeter如果进行JDBC请求,请求后的响应结果如何给下一个请求用(也就是传说中的关联),于是研究了一下,下面将学习的成果做个记录: 1.添加 "JDBC Connection Confi ...
- Ubuntu中如何打开终端terminal
法一 先按住Alt,然后再按F2,出来一个运行框,在里面输入gnome-terminal即可 [编辑]法二 如果想从右键菜单中打开终端,需要安装一个软件: sudoapt-get install na ...
- Java常用命令
jps 查看java进程的PID java -XX:+PrintFlagsInitial 显示所有可设置参数及默认值 java -XX:+PrintFlagsFinal 获取到所有可 ...