题目链接:

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. Ubuntu下搭建repo服务器(二): 配置git-daemon-run

    git-daemon-run实际是一个脚本管理工具,用来启动git-daemon. 1 安装git-daemon-run(A端) apt-get install git-daemon-run 2. 配 ...

  2. 利用python去除红章

    近期接的一个需求需要去除图片的红章,用到了PIL库. from PIL import Image,ImageEnhanceimport os#f="5-12 - 0001.tif" ...

  3. 【转】DOS与linux的断行字符

    转自:http://www.2cto.com/os/201109/104833.html 今天配置linux的dns服务器,在配置的时候,在linux下修改配置文件感觉很麻烦,于是想到把配置文件拿到w ...

  4. C#中 分层 显示数据库中多表的数据信息

    如下图,要实现将三个表中的内容加载到同一个窗体中,该怎么来实现呢? 要实现上面的查询结果,我们就要从Student表中拿到学生姓名,从Subject表中拿到科目名称,从StudentResult表中拿 ...

  5. 新认知之WinForm窗体程序

    Windows应用程序和控制台应用程序有很大的区别 >Form1.cs  :窗体文件,程序员对窗体编写的代码一般都存放在这个文件中. >Form1.Designer.cs :窗体设计文件, ...

  6. Python随笔-函数

    在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. def GetMax(v1, v2):#注 ...

  7. Laravel 5.4.36 session 发现

    由于Laravel session机制完全脱离了PHP自带的session机制  因此对于php.ini 配置session对Laravel  是不会产生影响 代码路径:   vendor/larav ...

  8. 【VHDL】深度讲解二进制无符号和有符号加法处理溢出的问题

    1.Unsigned adders 这个比较简单,只需在A.B前面扩展一位0防止溢出,溢出的数填到第n位cout,n-1到0位就是sum. , 2.Signed adders 一开始也搞不懂下图中为什 ...

  9. HDU_3549_网络流(最大流)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  10. java 类名.this

    类名为this的限定词. 相对于内部类:有多个this: 1.内部类本身的this: 2.内部类的环境类的this: 类名.this,就是为了对这些this指针的指向做出限定. 区别于类名.class ...