HDU 1813 Escape from Tetris
来源:互联网 发布:学生成绩管理系统软件 编辑:程序博客网 时间:2024/06/11 04:18
Escape from Tetris
Time Limit : 12000/4000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 1 Accepted Submission(s) : 1
Problem Description
由于整日整夜地对着这个棋盘,Lele终于走火入魔。每天一睡觉,他就会梦到自己会被人被扔进一个棋盘中,一直找不到出路,然后从梦中惊醒。久而久之,Lele被搞得精神衰弱。梦境是否会成为现实,谁也说不准,不过不怕一万只怕万一。现在Lele每次看到一个棋盘,都会想象一下自己被关进去以后要如何逃生。
Lele碰到的棋盘都是正方形的,其中有些格子是坏的,不可以走,剩下的都是可以走的。只要一走到棋盘的边沿(最外面的一圈),就算已经逃脱了。Lele梦见自己一定会被扔在一个可以走的格子里,但是不确定具体是哪一个,所以他要做好被扔在任意一个格子的准备。
现在Lele请你帮忙,对于任意一个棋盘,找出一个最短的序列,序列里可以包括"north"(地图里向上),"east"(地图里向右),"south"(地图里向下),"west"(地图里向左),这四个方向命令。不论Lele被扔在棋盘里的哪个好的格子里,都能按这个序列行走逃出棋盘。
逃脱的具体方法是:不论Lele被扔在哪里,Lele按照序列里的方向命令一个一个地走,每个命令走一格,如果走的时候会碰到坏的格子,则忽略这条命令。当然,如果已经逃脱了,就可以不考虑序列中剩下的命令了。
Lele碰到的棋盘都是正方形的,其中有些格子是坏的,不可以走,剩下的都是可以走的。只要一走到棋盘的边沿(最外面的一圈),就算已经逃脱了。Lele梦见自己一定会被扔在一个可以走的格子里,但是不确定具体是哪一个,所以他要做好被扔在任意一个格子的准备。
现在Lele请你帮忙,对于任意一个棋盘,找出一个最短的序列,序列里可以包括"north"(地图里向上),"east"(地图里向右),"south"(地图里向下),"west"(地图里向左),这四个方向命令。不论Lele被扔在棋盘里的哪个好的格子里,都能按这个序列行走逃出棋盘。
逃脱的具体方法是:不论Lele被扔在哪里,Lele按照序列里的方向命令一个一个地走,每个命令走一格,如果走的时候会碰到坏的格子,则忽略这条命令。当然,如果已经逃脱了,就可以不考虑序列中剩下的命令了。
Input
本题目包含多组测试,请处理至文件结束。 每组测试第一行包含一个正整数 N (0<n<9),代表棋盘的大小是 n*n="" 接下来有n行,每行n个字符代表这个棋盘。="" 其中0代表该位置是好的,可以走,1代表该位置是坏的,不可以走。="" 题目数据保证,对于任意一个棋盘,都存在题目中所要求的序列="" <="" div="">
Output
对于每组数据,输出题目所要求的序列,序列中每个元素一行。 如果存在两个符合要求的序列,请输出字典序最小的那个序列。 两个测试之间请用一个空行隔开。
Sample Input
41101000111001001
Sample Output
eastnorth
Author
linle
Source
HDOJ 2007 Summer Exercise(2)
如题 IDA*
广搜获得每个可能降落点的预估值,由边广搜
#include <iostream>#include <cstdio>#include <queue>#include <cstring>#include <string>using namespace std;int dir[4][2]= {0,1,-1,0,1,0,0,-1};char Map[10][10];int n,len,ll;char ch[4][10]= {{"east"},{"north"},{"south"},{"west"}};int vis[10][10],flag[1111];struct node{ int x,y; bool cheak() { if(x>=0&&x<n&&y>=0&&y<n) return true ; return false ; }} a[111];void bfs(int x,int y) //预处理估计值{ node e; e.x=x,e.y=y; queue<node>q; q.push(e); vis[e.x][e.y]=0; while(q.size()) { e=q.front(); q.pop(); for(int i=0; i<4; i++) { node ee=e; ee.x+=dir[i][0]; ee.y+=dir[i][1]; if(ee.cheak()) { if(Map[ee.x][ee.y]=='0') if(vis[ee.x][ee.y]==-1||vis[ee.x][ee.y]>vis[e.x][e.y]+1) { vis[ee.x][ee.y]=vis[e.x][e.y]+1; q.push(ee); } } } } return ;}int get_h(node * e) { int ans=0; for(int i=0; i<len; i++) { ans=max(vis[e[i].x][e[i].y],ans); } return ans;}bool dfs(int length,node * e){ if(length<get_h(e)) return false ; if(length==0) return true ; for(int i=0; i<4; i++) { node ee[111]; for(int j=0; j<len; j++) { ee[j]=e[j]; ee[j].x+=dir[i][0]; ee[j].y+=dir[i][1]; if(!ee[j].cheak()||e[j].x==0||e[j].y==0||e[j].x==n-1||e[j].y==n-1||Map[ee[j].x][ee[j].y]=='1') //没有达到出口 { ee[j]=e[j]; } } flag[length]=i; if(dfs(length-1,ee)) return true ; } return false ;}int main(){ bool ant=false ; while(~scanf("%d",&n)) { if(ant) printf("\n"); ant=true ; for(int i=0; i<n; i++) { getchar(); for(int j=0; j<n; j++) scanf("%c",&Map[i][j]); } memset(vis,-1,sizeof(vis)); len=0; for(int i=0; i<n; i++) for(int j=0; j<n; j++) { if(Map[i][j]=='0'&&(i==0||i==n-1||j==0||j==n-1)) bfs(i,j); else if(Map[i][j]=='0')a[len].x=i,a[len++].y=j; } int length=get_h(a); while(!dfs(length,a)) { length++; } while(length--) { printf("%s\n",ch[flag[length+1]]); } } return 0;}
0 0
- HDU 1813 Escape from Tetris
- HDU 1813 Escape from Tetris
- HDU 1813 Escape from Tetris IDA*搜索
- HDU 1813 Escape from Tetris (IDA*)
- 【搜索进阶】HDU 1813 Escape from Tetris
- HDU 1813 Escape from Tetris IDA*
- HDOJ 1813 Escape from Tetris
- hud oj 1813 Escape from Tetris
- hdu1813 Escape from Tetris
- HDU1813:Escape from Tetris(IDA)
- hdu1813 Escape from Tetris (IDA*)
- #HDU1813#Escape from Tetris(IDA*_搜索)
- 解题报告:HDU_1813 Escape from Tetris 综合搜索IDA*
- hdu 2337 Escape from Enemy Territory
- hdu 2337 Escape from Enemy Territory (预处理+二分+搜索)
- hdu 2337 Escape from Enemy Territory (presolve bfs +bfs+二分)
- hdu 2337 Escape from Enemy Territory (二分枚举+预处理+bfs)
- hdu 2337 Escape from Enemy Territory (预处理+二分+宽搜)
- 哈理工院赛训练题目 Kid-排列
- spring多数据源+事物管理
- soj 2111: littleken bg
- ReactNative基础教程
- Struts 2读书笔记-----使用Struts 2的输入校验
- HDU 1813 Escape from Tetris
- hdu 5543
- activity之间的跳转与数据传递
- BZOJ 4292: [PA2015]Równanie(转换枚举)
- CSS Master, Sitepoint 2015读书笔记(印象比较深的几点:CSS优先级3元组表示法,多列及flex,Transforms)
- 创建库并上传至私有Maven
- CoordinatorLayout嵌套AppBarLayout的使用
- Python CGI
- 使用CreateThread函数创建线程