码迷,mamicode.com
首页 > 其他好文 > 详细

Chessboard Dance

时间:2020-10-29 10:45:52      阅读:28      评论:0      收藏:0      [点我收藏+]

标签:void   字母   描述   direct   直接   har   ace   国际   输出   

题目描述

在棋盘上跳舞是件有意思的事情。现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向。求按一定操作后,棋盘的状态。

操作有四种,描述如下:

move n n是非负整数,表示你按目前所在方向前进n步,如果即将走出棋盘,则停止。如果面前有棋子,则将其向前推一步。

turn left 向左转90度

turn right 向右转90度

turn back 向后转

输入格式

输入前8行,每行8个字符,给出棋盘状态。“.”表示该格为空,字母表示棋子,不同字母表示不同的棋子。你所在位置用“^”、“<”、“>”、“v”四个字母中一个表示,分别表示你的方向上、左、右、下。

接下来有若干行,每行一个操作。以“#”结束。操作数不超过1000个。

输出格式

输出8行,每行8个字符,表示经过一系列操作后棋盘和你的状态。表示方法同输入。

输入输出样例

输入

......bA
.....^..
........
........
........
........
........
........
move 2
turn right
move 1
#

输出

......>b
........
........
........
........
........
........
........

分析

如果前面是空地,直接向前走。

如果前面是字符,先遍历字符前面的点,如果遍历到一个空地再推

如果当前点到达了边界则break。

真就直接暴力模拟

多个棋子可以一起推

程序

#include <bits/stdc++.h>

using namespace std;

char s[10001][10001];
char situtation[4] = {^,v,<,>};
int direction = 0 , x , y;
int direction_back[5] = {0 , 2 , 1 , 4 , 3};
int direction_right[5] = {0 , 4 , 3 , 1 , 2};
int direction_left[5] = {0 , 3 , 4 , 2 , 1};

void Go_Up(int k) 
{
    int x_next = x;
    int y_next = y;
    for(int i = x - 1; i >= 1; i--) 
    {
        if(x_next == 1)
            break;
        if(!k)
            break;
        if(s[i][y] == .) 
        {
            x_next--;
            k--;
            continue;
        }
        if(s[i][y] != .) 
        {
            int flag = i;
            for(int j = i; j >= 1; j--)
                if(s[j][y] == . || j == 1) 
                {
                    flag = j;
                    break;
                }
            for(int j = flag; j <= i; j++)
                s[j][y] =s [j + 1][y];
            x_next--;
            k--;
        }
    }
    x = x_next;
}
void Go_Down(int k) 
{
    int x_next = x;
    int y_next = y;
    for(int i = x + 1; i <= 8; i++) 
    {
        if(x_next == 8)
            break;
        if(!k)
            break;
        if(s[i][y] == .) 
        {
            x_next++;
            k--;
            continue;
        }
        if(s[i][y] != .) 
        {
            int flag = i;
            for(int j = i; j <= 8; j++)
                if(s[j][y] == . || j == 8) 
                {
                    flag = j;
                    break;
                }
            for(int j = flag; j >= i; j--)
                s[j][y] = s[j - 1][y];
            x_next++;
            k--;
        }
    }
    x = x_next;
}
void Go_Left(int k) 
{
    int y_next = y;
    for(int i = y - 1; i >= 1; i--) 
    {
        if(y_next == 1)
            break;
        if(k == 0)
            break;
        if(s[x][i] == .) 
        {
            y_next--;
            k--;
            continue;
        }
        if(s[x][i] != .) 
        {
            int flag = i;
            for(int j = i; j >= 1; j--) 
            {
                if(s[x][j] == .||j == 1) 
                {
                    flag = j;
                    break;
                }

            }
            for(int j = flag; j <= i; j++)
                s[x][j] = s[x][j + 1];
            y_next--;
            k--;
        }
    }
    y = y_next;
}
void Go_Right(int k) 
{
    int y_next = y;
    for(int i = y + 1; i <= 8; i++) 
    {
        if(y_next == 8)
            break;
        if(!k)
            break;
        if(s[x][i] == .) 
        {
            y_next++;
            k--;
            continue;
        }
        if(s[x][i] != .) 
        {
            int flag = i;
            for(int j = i; j <= 8; j++) 
            {
                if(s[x][j] == . || j == 8) 
                {
                    flag = j;
                    break;
                }

            }
            for(int j = flag; j >= i; j--)
                s[x][j] = s[x][j - 1];
            y_next++;
            k--;
        }
    }
    y = y_next;
}
int main() 
{
    ios::sync_with_stdio(false);
    for(int i = 1; i <= 8; i++)
        for(int j = 1; j <= 8; j++) 
        {
            cin >> s[i][j];
            if(s[i][j] == ^) 
            {
                direction=1;
                s[i][j] = .;
                x = i;
                y = j;
            }
            if(s[i][j] == v) 
            {
                direction = 2;
                x = i;
                y = j;
                s[i][j] = .;
            }
            if(s[i][j] == <) 
            {
                x = i;
                y = j;
                s[i][j] = .;
                direction = 3;
            }
            if(s[i][j] == >) 
            {
                x = i;
                y = j;
                s[i][j] = .;
                direction = 4;
            }
        }
    string a,b;
    int c;
    int t = 0;
    while(1) 
    {
        cin >> a;
        if(a == "#")
            break;
        else 
            if(a == "turn") 
            {
                cin >> b;
                if(b == "right")
                    direction = direction_right[direction];
                else 
                    if(b == "left")
                        direction = direction_left[direction];
                    else 
                        if(b == "back")
                            direction = direction_back[direction];
            }
            else 
                if(a == "move")            
                {
                    cin >> c;
                    if(direction == 1)
                        Go_Up(c);
                    else 
                        if(direction == 2)
                            Go_Down(c);
                        else 
                            if(direction == 3)
                                Go_Left(c);
                            else 
                                if(direction == 4)
                                    Go_Right(c);
            }
    }
    for(int i = 1; i <= 8; i++) 
    {
        for(int j = 1; j <= 8; j++) 
        {
            if(x == i && y == j)
                cout << situtation[direction - 1];
            else
                cout << s[i][j];
        }
        cout << endl;
    }
    return 0;
}

 

Chessboard Dance

标签:void   字母   描述   direct   直接   har   ace   国际   输出   

原文地址:https://www.cnblogs.com/Tenderfoot/p/13894443.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!