An interesting mobile game

Time Limit: 1000ms
Memory Limit: 32768KB

This problem will be judged on HDU. Original ID: 3295
64-bit integer IO format: %I64d      Java class name: Main

 
XQ,one of the three Sailormoon girls,is usually playing mobile games on the class.Her favorite mobile game is called “The Princess In The Wall”.Now she give you a problem about this game.
Can you solve it?The following picture show this problem better.

This game is played on a rectangular area.This area is divided into some equal square grid..There are N rows and M columns.For each grid,there may be a colored square block or nothing.
Each grid has a number.
“0” represents this grid have nothing.
“1” represents this grid have a red square block.
“2” represents this grid have a blue square block.
“3” represents this grid have a green square block.
“4” represents this grid have a yellow square block.

1. Each step,when you choose a grid have a colored square block, A group of this block and some connected blocks that are the same color would be removed from the board. no matter how many square blocks are in this group. 
2. When a group of blocks is removed, the blocks above those removed ones fall down into the empty space. When an entire column of blocks is removed, all the columns to the right of that column shift to the left to fill the empty columns.

Now give you the number of the row and column and the data of each grid.You should calculate how many steps can make the entire rectangular area have no colored square blocks at least.

 

Input

There are multiple test cases. Each case starts with two positive integer N, M,(N, M <= 6)the size of rectangular area. Then n lines follow, each contains m positive integers X.(0<= X <= 4)It means this grid have a colored square block or nothing.

 

Output

Please output the minimum steps.

 

Sample Input

5 6
0 0 0 3 4 4
0 1 1 3 3 3
2 2 1 2 3 3
1 1 1 1 3 3
2 2 1 4 4 4

Sample Output

4

Source

 
解题:IDA*,每次优先选择能使消除数目多的颜色进行搜索。写的第一道IDA*题目。。。。。IDA*不要存储状态,真是极好的
 
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <climits>
#include <algorithm>
#include <cmath>
#include <queue>
#define LL long long
#define INF 0x3f3f3f
using namespace std;
int table[][],r,c,ans,cnt;
const int dir[][] = {,-,,,-,,,};
bool vis[][];
struct node{
int x,y;
};
struct po{
int x,y,c;
};
bool check(int (*t)[]) {
for(int i = r; i ; i--) {
for(int j = ; j <= c; j++)
if(t[i][j]) return false;
}
return true;
}
bool cmp(const po &a,const po &b){
return a.c > b.c;
}
void calc(int (*t)[],int x,int y,const int color){
vis[x][y] = true;
cnt++;
for(int i = ; i < ; i++){
int px = x+dir[i][];
int py =y+dir[i][];
if(!vis[px][py] && t[px][py] == color)
calc(t,px,py,color);
}
}
void cancle(int (*t)[],int x,int y,const int color){
bool vis[][] = {false};
queue<node>q;
vis[x][y] = true;
int i,j,px,py;
t[x][y] = ;
q.push((node){x,y});
while(!q.empty()){
node temp = q.front();
q.pop();
for(i = ; i < ; i++){
px = temp.x+dir[i][];
py = temp.y+dir[i][];//这个地方写成dir[i][0]害我调了很久
if(!vis[px][py] && t[px][py] == color){
vis[px][py] = true;
t[px][py] = ;
q.push((node){px,py});
}
}
}
}
void shift(int (*t)[]){
int i,j,k;
bool isempty[] = {false};
for(j = ; j <= c; j++){
for(i = r-; i; i--){
for(k = i;k < r &&!t[k+][j]&&t[k][j]; k++)
swap(t[k+][j],t[k][j]);
}
if(!t[r][j]) isempty[j] = true;
}
for(j = c-; j; j--){
if(isempty[j]){
for(i = ; i <= r; i++){
for(k = j; k <= c; k++)
t[i][k] = t[i][k+];
}
}
}
}
bool dfs(int (*t)[],int step){
int mp[][],i,j,m = ;
bool flag;
if(check(t) && ans == step) return true;
if(step > ans) return false;
po p[];
memset(vis,false,sizeof(vis));
for(i = r; i; i--){
flag = true;
for(j = ; j <= c; j++){
if(t[i][j]) flag = false;
if(t[i][j] && !vis[i][j]){
cnt = ;
calc(t,i,j,t[i][j]);
p[m++] = (po){i,j,cnt};
}
}
if(flag) break;
}
sort(p,p+m,cmp);
for(i = ; i < m; i++){
memcpy(mp,t,sizeof(mp));
cancle(mp,p[i].x,p[i].y,t[p[i].x][p[i].y]);
shift(mp);
if(dfs(mp,step+)) return true;
}
return false;
}
int main() {
int i,j;
while(~scanf("%d %d",&r,&c)) {
memset(table,,sizeof(table));
for(i = ; i <= r; i++)
for(j = ; j <= c; j++)
scanf("%d",table[i]+j);
if(check(table)) {puts("");continue;}
for(ans = ;; ans++)
if(dfs(table,)) break;
printf("%d\n",ans);
}
return ;
}

xtu summer individual 1 A - An interesting mobile game的更多相关文章

  1. HDU-3295-An interesting mobile game(BFS+DFS)

    Problem Description XQ,one of the three Sailormoon girls,is usually playing mobile games on the clas ...

  2. 【HDOJ】3295 An interesting mobile game

    其实就是一道搜索模拟题.因为数据量小,用char就够了. /* 3295 */ #include <iostream> #include <cstdio> #include & ...

  3. xtu summer individual 4 C - Dancing Lessons

    Dancing Lessons Time Limit: 5000ms Memory Limit: 262144KB This problem will be judged on CodeForces. ...

  4. xtu summer individual 3 C.Infinite Maze

    B. Infinite Maze time limit per test  2 seconds memory limit per test  256 megabytes input standard ...

  5. xtu summer individual 2 E - Double Profiles

    Double Profiles Time Limit: 3000ms Memory Limit: 262144KB This problem will be judged on CodeForces. ...

  6. xtu summer individual 2 C - Hometask

    Hometask Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Origin ...

  7. xtu summer individual 2 D - Colliders

    Colliders Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Origi ...

  8. xtu summer individual 1 C - Design the city

    C - Design the city Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu D ...

  9. xtu summer individual 1 E - Palindromic Numbers

    E - Palindromic Numbers Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %l ...

随机推荐

  1. linux常用的shell命令

    1.shell介绍 shell(外壳)是linux系统的最外层,简单的说,它就是用户和操作系统之间的一个命令解释器. 2.shell命名的使用 ls :查看当前目录的信息,list .        ...

  2. Appium + Python自动化 - 元素定位uiautomatorviewer

    元素定位主要介绍如何使用uiautiomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作.uiautiomatorviewer是android-sdk自带的一个元素定位工具,非常 ...

  3. CentOS Linux下MySQL 5.1.x的安装、优化和安全配置

    下载页面:http://dev.mysql.com/downloads/mysql/5.1.html#downloads 到页面底部,找到Source downloads,这个是源码版本,下载第1个T ...

  4. P1720 月落乌啼算钱

    题目背景 (本道题目木有以藏歌曲……不用猜了……) <爱与愁的故事第一弹·heartache>最终章. 吃完pizza,月落乌啼知道超出自己的预算了.为了不在爱与愁大神面前献丑,只好还是硬 ...

  5. nodejs+multiparty 文件上传

    通过表单提交上传文件:     html代码 <form action="/uploadFile" method="post" enctype=" ...

  6. java 自定义注解,并使用示例

    场景: 对需要校验  手机验证码和短信验证码的controller方法添加 自定义的注解 @CheckType 1. 定义注解 /** * 需要短信.验证码验证方法上的注解 * date: 2018年 ...

  7. grunt配置详情

    这个grunt配置 是我的一个程序员朋友从网上无意间看到的,然后他亲测了下,恩,是可以的.不过我到目前还未测试过是否可以. 一.安装node, 首先确保电脑已有node的环境.然后 运行  npm i ...

  8. canvas基础绘制-倒计时(上)

    效果: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  9. 初学web前端,掌握这些就足够了!

    Web开发如今是如日中天,热的发烫.那我们应该怎么学习呢?这不光是初学者,很多学了几年的人也会有些迷茫或者彷徨,大家也都知道不断学习是不可避免的,不学习肯定要掉队:那怎么学效率更高,那些是坑,那些是路 ...

  10. 在phpnow中配置phpunit

    前面都好了之后,在 D:\phpnow\php-5.2.14-Win32\PEAR 之外的地方执行 phpinfo 都会出现以下错误 Warning: require_once(File/Iterat ...