HDU-3295-An interesting mobile game(BFS+DFS)
来源:互联网 发布:里杰卡尔德知乎 编辑:程序博客网 时间:2024/06/05 15:02
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.
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 60 0 0 3 4 40 1 1 3 3 32 2 1 2 3 31 1 1 1 3 32 2 1 4 4 4
Sample Output
4Hint0 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 00 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 02 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 01 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 02 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
2010 “HDU-Sailormoon” Programming Contest
思路:因为方块会越消越少,所以没必要判重。注意消去之后,上面的会掉下来,如果某一列全为是空的,右边的会往左移。左移的时候注意连续两列为空的情况,虽然数据弱,之前没考虑也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++; } }}
51 0
- HDU-3295-An interesting mobile game(BFS+DFS)
- hdu 3295 An interesting mobile game(bfs)
- hdu 3259 An interesting mobile game (dfs+bfs+模拟)
- HDU 3295 An interesting mobile game
- hdu3295 An interesting mobile game (IDA*)
- HDU3295An interesting mobile game(BFS +模拟)
- BUPT OJ148 An Interesting Game
- 图论专题 An Interesting Game
- sdut2414 An interesting game 费用流
- HDU-2259-Continuous Same Game (2)(BFS+DFS+模拟)
- hdu 5323 Solve this interesting problem 【DFS】
- HDU 5323 Solve this interesting problem(DFS)
- HDU 5323Solve this interesting problem(DFS)
- Hdu 5323 Solve this interesting problem【Dfs】
- 【SDUTOJ 2414】An interesting game(最小费用最大流)
- SDUT 2414 An interesting game(最大费用流)
- 【SDUT2414】An interesting game——最小费用
- HDUT-2414-An interesting game(最小费用最大流)
- error : comparison of distinct pointer types lacks a cast
- 今天遇到“未能加载文件或程序集"xxx”或它的某一个依赖项。试图加载格式不正确的程序。”
- 构建Android 开发环境
- jprofile8意外关闭
- ARM CPU 简单分类
- HDU-3295-An interesting mobile game(BFS+DFS)
- php session设置说明
- find the mincost route(floyd算法)
- enable_shared_from_this
- 博客地址
- Smart Config工作原理
- 黑马程序员_Map集合
- 数据文件元格式
- <Twitter>temproxy开源memcache/redis代理