Problem Description
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
Hint
0 0 0 3 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 3 3 3 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 2 1 2 3 3 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 3 3 2 2 2 3 3 0 2 2 2 4 4 0 2 2 0 0 0 0 0 0 0 0 0 0
2 2 1 4 4 4 2 2 4 4 4 0 2 2 4 4 4 0 2 2 2 0 0 0 0 0 0 0 0 0
 
Author
B.A.C
 
Source

思路:由于方块会越消越少,所以不是必需判重。注意消去之后。上面的会掉下来,假设某一列全为是空的。右边的会往左移。左移的时候注意连续两列为空的情况,尽管数据弱。之前没考虑也AC了。

#include <stdio.h>

struct{
int d[6][6],step;
}que[1000000],t; int n,m,temp[6][6],nxt[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
bool vis[6][6]; void dfs(int x,int y,int num)
{
for(int i=0;i<4;i++)
{
x+=nxt[i][0];
y+=nxt[i][1]; if(x>=0 && x<n && y>=0 && y<m && !vis[x][y] && temp[x][y]==num)
{
vis[x][y]=1; t.d[x][y]=0; dfs(x,y,num);
} x-=nxt[i][0];
y-=nxt[i][1];
}
} int main()
{
int i,j,k,p,q,top,bottom;
bool flag; while(~scanf("%d%d",&n,&m))
{
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&que[0].d[i][j]); top=0;
bottom=1; que[0].step=0; while(top<bottom)
{
t=que[top]; flag=1; for(i=0;i<n && flag;i++) for(j=0;j<m && flag;j++) if(t.d[i][j]) flag=0; if(flag)
{
printf("%d\n",t.step); break;
} t.step++; for(i=0;i<n;i++) for(j=0;j<m;j++) temp[i][j]=t.d[i][j],vis[i][j]=0; for(i=0;i<n;i++) for(j=0;j<m;j++)
{
if(temp[i][j] && !vis[i][j])
{
vis[i][j]=1; t.d[i][j]=0; dfs(i,j,temp[i][j]); for(p=n-1;p>=0;p--)//向下移动
{
for(q=0;q<m;q++)
{
if(!t.d[p][q])
{
for(k=p-1;k>=0;k--)
{
if(t.d[k][q])
{
t.d[p][q]=t.d[k][q];
t.d[k][q]=0; break;
}
}
}
}
} int tt=m-1;
while(tt--)//向左移动,注意连续两列都为空的情况。
{
for(q=0;q<m-1;q++)
{
for(p=0;p<n;p++) if(t.d[p][q]) break; if(p<n) continue; for(p=0;p<n;p++)
{
t.d[p][q]=t.d[p][q+1];
t.d[p][q+1]=0;
}
}
} que[bottom++]=t; for(p=0;p<n;p++) for(q=0;q<m;q++) t.d[p][q]=temp[p][q];
}
} top++;
}
}
}

HDU-3295-An interesting mobile game(BFS+DFS)的更多相关文章

  1. HDU 1044 Collect More Jewels(BFS+DFS)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  2. 【HDOJ】3295 An interesting mobile game

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

  3. xtu summer individual 1 A - An interesting mobile game

    An interesting mobile game Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on H ...

  4. hdu 3295 模拟过程。数据很水

    An interesting mobile game Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Ja ...

  5. Cleaning Robot (bfs+dfs)

    Cleaning Robot (bfs+dfs) Here, we want to solve path planning for a mobile robot cleaning a rectangu ...

  6. POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)

    思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...

  7. 邻结矩阵的建立和 BFS,DFS;;

    邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...

  8. HDU.2612 Find a way (BFS)

    HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...

  9. Collect More Jewels(hdu1044)(BFS+DFS)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

随机推荐

  1. CSS3 四边形 凹角写法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Java IO(二)--RandomAccessFile基本使用

    RandomAccessFile: 翻译过来就是任意修改文件,可以从文件的任意位置进行修改,迅雷的下载就是通过多个线程同时读取下载文件.例如,把一个文件分为四 部分,四个线程同时下载,最后进行内容拼接 ...

  3. 2.10.4 aside元素

    aside元素 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  4. 为了安全请不要随意在页面中设置validateRequest="false"

    为了安全请不要随意在页面中设置validateRequest="false" 分类: ASP.NET2009-04-12 17:24 531人阅读 评论(0) 收藏 举报 asp. ...

  5. python 调用exe程序

    #!/usr/bin/python #-*- coding:utf-8 -*- import os, subprocess import tkMessageBox import msg_box def ...

  6. 关键字搜索高亮jQuery插件

    // textSearch.js v1.0 文字,关键字的页面纯客户端搜索// 2010-06-23 修复多字母检索标签破碎的问题// 2010-06-29 修复页面注释显示的问题// 2013-05 ...

  7. urlEncoder

    拷贝自php的源码,url编码 //url decode //str:输入,输出 //len:str输入字符串大小 //返回值:str解码后字符串大小 int php_url_decode(char ...

  8. <Redis> 入门六 主从复制方式的集群

    1.集群如何操作 现在有三台虚拟机,ip分别为100,105,106,将100作为master,其他两台作为slave 1.vim redis.conf 以前的版本是 slaveof <mast ...

  9. Shiro框架 (原理分析与简单实现)

    Shiro框架(原理分析与简单实现) 有兴趣的同学也可以阅读我之前分享的:Java权限管理(授权与认证)CRM权限管理   (PS : 这篇博客里面的实现方式没有使用框架,完全是手写的授权与认证,可以 ...

  10. 每日命令:(13)more

    more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...