题目链接:

PKU:http://poj.org/problem?

id=3344

HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2414

Description

Another boring Friday afternoon, Betty the Beetle thinks how to amuse herself. She goes out of her hiding place to take a walk around the living room in Bennett's house. Mr. and Mrs. Bennett are out to the theatre and there is a chessboard on the table!
"The best time to practice my chessboard dance," Betty thinks! She gets so excited that she does not note that there are some pieces left on the board and starts the practice session! She has a script showing her how to move on the chessboard. The script is
a sequence like the following example:

At each instant of time Betty, stands on a square of the chessboard, facing one of the four directions (up, down, left, right) when the board is viewed from the above. Performing a "move n" instruction, she moves n squares forward in her
current direction. If moving n squares goes outside the board, she stays at the last square on the board and does not go out. There are three types of turns: turn right, turn left, and turn back, which change the direction of Betty. Note that turning
does not change the position of Betty.

If Betty faces a chess piece when moving, she pushes that piece, together with all other pieces behind (a tough beetle she is!). This may cause some pieces fall of the edge of the chessboard, but she doesn't care! For example, in the following figure, the
left board shows the initial state and the right board shows the state after performing the script in the above example. Upper-case and lower-case letters indicate the white and black pieces respectively. The arrow shows the position of Betty along with her
direction. Note that during the first move, the black king (r) falls off the right edge of the board!

You are to write a program that reads the initial state of the board as well as the practice dance script, and writes the final state of the board after the practice.

Input

There are multiple test cases in the input. Each test case has two parts: the initial state of the board and the script. The board comes in eight lines of eight characters. The letters r, d, t, a, c, p indicate black pieces, R, D, T, A, C, P indicate the
white pieces and the period (dot) character indicates an empty square. The square from which Betty starts dancing is specified by one of the four characters <, >, ^, and v which also indicates her initial direction (left, right, up, and down respectively).
Note that the input is not necessarily a valid chess game status.

The script comes immediately after the board. It consists of several lines (between 0 and 1000). In each line, there is one instruction in one of the following formats (n is a non-negative integer number):

move n

turn left

turn right

turn back

At the end of each test case, there is a line containing a single # character. The last line of the input contains two dash characters.

Output

The output for each test case should show the state of the board in the same format as the input. Write an empty line in the output after each board.

Sample Input

.....c..
.p..A..t
D..>T.Pr
....aP.P
p.d.C...
.....p.R
........
........
move 2
turn right
move 3
turn left
turn left
move 1
#
--

Sample Output

.....c..
.p..A..t
D.....TP
....a..P
p.d.C^..
.......R
.....P..
.....p..

Source

题意:

模拟推箱子的过程,依照所给的步骤推完后输出终于的棋盘状态!

PS:

注意在推的过程中,不能走出棋盘外,所推的棋子能够出棋盘。

代码例如以下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = 27;
char mm[maxn][maxn];
struct node
{
int x;
int y;
int dir;
} p;
char dir[4] = {'v','>','^','<'};
//写为下、右、上、左是为了turn back操作
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1}; int vis(int x, int y)
{
if(x<1 || x>8)
return 0;
if(y<1 || y>8)
return 0;
return 1;
}
void DFS(int x, int y)
{
if(mm[x][y]=='.')
{
mm[x][y]=mm[x-dx[p.dir]][y-dy[p.dir]];
mm[x-dx[p.dir]][y-dy[p.dir]]='.';
}
else
{
DFS(x+dx[p.dir],y+dy[p.dir]);
mm[x][y]=mm[x-dx[p.dir]][y-dy[p.dir]];
mm[x-dx[p.dir]][y-dy[p.dir]]='.';
}
}
void Rush()
{
for(int i = 0; i <= 8; i++)
{
//初始化棋盘外的一圈全为'.'
mm[0][i]=mm[i][0]=mm[9][i]=mm[i][9]='.';
}
mm[p.x][p.y] = '.';
if(!vis(p.x+dx[p.dir],p.y+dy[p.dir]))
return ;
DFS(p.x+dx[p.dir],p.y+dy[p.dir]);
p.x += dx[p.dir];
p.y += dy[p.dir];
} int main()
{
char a[maxn], b[maxn];
int step;
while(scanf("%s",mm[1]+1))
{
if(mm[1][1] == '-')
break;
for(int i = 2; i <= 8; i++)
{
scanf("%s",mm[i]+1);
}
for(int i = 1; i <= 8; i++)
{
for(int j = 1; j <= 8; j++)
{
if(mm[i][j] == 'v')
{
p.x = i,p.y = j,p.dir = 0;
}
else if(mm[i][j] == '>')
{
p.x = i,p.y = j,p.dir = 1;
}
else if(mm[i][j] == '^')
{
p.x = i,p.y = j,p.dir = 2;
}
else if(mm[i][j] == '<')
{
p.x = i,p.y = j,p.dir = 3;
}
}
}
while(scanf("%s",a))
{
if(a[0] == '#')
break;
if(a[0] == 't')
{
scanf("%s",b);
if(b[0] == 'l')
p.dir=(p.dir+1)%4;
else if(b[0]=='r')
p.dir=(p.dir+3)%4;
else
p.dir=(p.dir+2)%4;
}
else
{
scanf("%d",&step);
for(int i = 0; i < step; i++)
{
Rush();
}
}
}
mm[p.x][p.y] = dir[p.dir];
for(int i = 1; i <= 8; i++)
{
for(int j = 1; j <= 8; j++)
{
printf("%c",mm[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}

POJ 3344 &amp; HDU 2414 Chessboard Dance(模拟)的更多相关文章

  1. HDU 2414 Chessboard Dance (力模拟)

    主题链接:HDU 2414 Chessboard Dance 意甲冠军:鉴于地图,>,<,^,v的方向,字母相当于是箱子,箱子能够推出边界.人保证不会做出边界.以下输入指令,依照指令走,输 ...

  2. HDU 2414 Chessboard Dance(模拟题,仅此纪念我的堕落)

    题目 模拟题也各种wa,我最近真的堕落了,,,,,智商越来越为负数了!!!!!!!! #include<stdio.h> #include<string.h> #include ...

  3. 【HDOJ】2414 Chessboard Dance

    简单DFS. /* 2414 */ #include <cstdio> #include <cstring> #include <cstdlib> ; ][]; i ...

  4. 洛谷 P2033 Chessboard Dance

    P2033 Chessboard Dance 题目描述 在棋盘上跳舞是件有意思的事情.现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向.求按一定操作后,棋盘的状态. 操作有四种,描述如下 ...

  5. POJ 3488 &amp; HDU 1915 Arne Saknussemm(模拟)

    题目链接: POJ:http://poj.org/problem? id=3488 HDU:pid=1915">http://acm.hdu.edu.cn/showproblem.ph ...

  6. HDU 5510---Bazinga(指针模拟)

    题目链接 http://acm.hdu.edu.cn/search.php?action=listproblem Problem Description Ladies and gentlemen, p ...

  7. HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 解题报告:问一个“M”型可以把一个矩形的平面最多分割成多少块. 输入是有n个“M",现 ...

  8. UVALive 4222 Dance 模拟题

    Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...

  9. HDU 5965 扫雷 【模拟】 (2016年中国大学生程序设计竞赛(合肥))

    扫雷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

随机推荐

  1. Android内存管理(12)*「实例」用Monitor 生成.hprof文件 并分析内存泄漏

    参考 http://blog.csdn.net/xiaanming/article/details/42396507 基本步骤: 1,准备一个有内存泄漏的代码 2,如何发现内存泄漏 3,生成.hpro ...

  2. 【转】基于linux下的变量声明declare的用法

    转自:http://techcurtman.iteye.com/blog/1249512 declare 功能介绍:声明变量的属性,如果使用declare,后面没有任何参数,那么bash就会主动将所有 ...

  3. c#异步多线程

    1.asyncrel = delegate.BeginInvoke实现委托异步调用. 2.异步等待 asyncrel.IsCompleted用于判断是否执行完毕 or EndInvoke用于等待执行完 ...

  4. vs项目结构解析

    当我们用VS开发一个项目的时候,首先应该清楚用VS这个IDE生成的一些文件和文件夹是什么意思,起什么作用,什么场合下使用. 因为我使用的是VS2015,就以这个为例来进行一些说明: 首先要做的是更改你 ...

  5. Spring Cloud (8) 服务容错保护-Hystrix依赖隔离

    依赖隔离 docker使用舱壁模式来实现进程的隔离,使容器与容器之间不会互相影响.而Hystrix则使用该模式实现线程池的隔离,它会为每一个Hystrix命令创建一个独立的线程池,这样就算在某个Hys ...

  6. 移动web——touch事件应用

    基本概况 1.touch事件在移动端被用来代替click事件,因为click事件的触发会延迟影响了用户体验 2.touch事件还可以与translate构成吸附效果 3.现行有一种排版方式是左边宽度是 ...

  7. jmeter解决中文乱码问题

    问题: 当响应数据或响应页面没有设置编码时,jmeter会按照jmeter.properties文件中,sampleresult.default.encoding 设置的格式解析默认ISO-8859- ...

  8. Burnside引理和polay计数 poj2409 Let it Bead

    题目描述 "Let it Bead" company is located upstairs at 700 Cannery Row in Monterey, CA. As you ...

  9. NTP测试1

    ntp server A : 10.101.75.8 B : 10.101.75.38 B: [root@r10n16313.sqa.zmf /home/ahao.mah] #cat /etc/ntp ...

  10. Sessions共享技术设计

    概述 分布式session是实现分布式部署的前提, 当前项目由于历史原因未实现分布式session, 但是由于在kubernets中部署多个pod时, 负载均衡的调用链太长, 导致会话不能保持, 所以 ...