感觉硬打出了蓝题的难度。。。
#include<bits/stdc++.h>
using namespace std;
char mapp[15][15];
int nx,ny,fx;
char p[5] = {'^','v','<','>'};
bool cheak(int x,int y){
if(mapp[x][y] != '.'){
return 1;
}
return 0;
}
void left(int x){
if(x == 1)fx = 3;
else if(x == 2)fx = 4;
else if(x == 3)fx = 2;
else if(x == 4)fx = 1;
}
void right(int x){
if(x == 1)fx = 4;
else if(x == 2)fx = 3;
else if(x == 3)fx = 1;
else if(x == 4)fx = 2;
}
int len(int x,int y,int fx){
int sum = 0;
if(fx == 1){
for(int i = x - 1;i >= 1;i--){
if(cheak(i,y)){
sum ++;
}
else{
break;
}
}
return sum;
}
else if(fx == 2){
for(int i = x + 1;i <= 8;i++){
if(cheak(i,y)){
sum ++ ;
}
else{
break;
}
}
return sum;
}
else if(fx == 3){
for(int i = y - 1;i >= 1;i --){
if(cheak(x,i)){
sum ++;
}
else{
break;
}
}
return sum;
}
else if(fx == 4){
for(int i = y + 1;i <= 8;i++){
if(cheak(x,i)){
sum ++;
}
else{
break;
}
}
return sum;
}
}
void go2(int x,int y,int fx,int len){
if(fx == 1){
for(int i = x - len - 1 ;i < x;i++){
mapp[i][y] = mapp[i + 1][y];
}
}
if(fx == 2){
for(int i = x + len + 1;i > x ;i--){
mapp[i][y] = mapp[i - 1][y];
}
}
if(fx == 3){
for(int i = y - len - 1;i < y;i++){
mapp[x][i] = mapp[x][i + 1];
}
}
if(fx == 4){
for(int i = y + len + 1;i > y;i --){
mapp[x][i] = mapp[x][i - 1];
}
}
}
void go(int x,int y,int step,int fx){
if(fx == 2){
for(int i = 1;i <= step;i ++){
if(nx + 1 <= 8){
mapp[nx][ny] = '.';
nx ++;
if(cheak(nx,ny)){
if(nx + 1 <= 8){
if(cheak(nx + 1,ny)){
int tmp = len(nx,ny,fx);
go2(nx,ny,fx,tmp);
}
else{
mapp[nx + 1][ny] = mapp[nx][ny];
}
}
}
mapp[nx][ny] = p[fx - 1];
}
else{
mapp[nx][ny] = p[fx - 1];
break;
}
}
}
if(fx == 1){
for(int i = 1;i <= step;i ++){
if(nx - 1 >= 1){
mapp[nx][ny] = '.';
nx --;
if(cheak(nx,ny)){
if(nx - 1 >= 1){
if(cheak(nx - 1,ny)){
int tmp = len(nx,ny,fx);
go2(nx,ny,fx,tmp);
}
else{
mapp[nx - 1][ny] = mapp[nx][ny];
}
}
}
mapp[nx][ny] = p[fx - 1];
}
else{
mapp[nx][ny] = p[fx - 1];
break;
}
}
}
if(fx == 3){
for(int i = 1;i <= step;i ++){
if(ny - 1 >= 1){
mapp[nx][ny] = '.';
ny --;
if(cheak(nx,ny)){
if(ny - 1 >= 1){
if(cheak(nx,ny - 1)){
int tmp = len(nx,ny,fx);
go2(nx,ny,fx,tmp);
}
else{
mapp[nx][ny - 1] = mapp[nx][ny];
}
}
}
mapp[nx][ny] = p[fx - 1];
}
else{
mapp[nx][ny] = p[fx - 1];
break;
}
}
}
if(fx == 4){
for(int i = 1;i <= step;i ++){
if(ny + 1 <= 8){
mapp[nx][ny] = '.';
ny ++;
if(cheak(nx,ny)){
if(ny + 1 <= 8){
if(cheak(nx,ny + 1)){
int tmp = len(nx,ny,fx);
go2(nx,ny,fx,tmp);
}
else{
mapp[nx][ny + 1] = mapp[nx][ny];
}
}
}
mapp[nx][ny] = p[fx - 1];
}
else{
mapp[nx][ny] = p[fx - 1];
break;
}
}
}
}
int main(){
for(int i = 1;i <= 8;i++){
for(int j = 1;j <= 8;j++){
cin >> mapp[i][j];
}
}
for(int i = 1;i <= 8;i++){
for(int j = 1;j <= 8;j++){
if(mapp[i][j] == '^'){
fx = 1;
nx = i,ny = j;
}
if(mapp[i][j] == 'v'){
fx = 2;
nx = i,ny = j;
}
if(mapp[i][j] == '<'){
fx = 3;
nx = i,ny = j;
}
if(mapp[i][j] == '>'){
fx = 4;
nx = i,ny = j;
}
}
}
string s;
int tmp;
while(1){
cin >> s;
if(s == "#"){
for(int i = 1;i <= 8;i++){
for(int j = 1;j <= 8;j++){
if(mapp[i][j] == '>' || mapp[i][j] == '<' || mapp[i][j] == 'v' || mapp[i][j] == '^'){
mapp[i][j] = p[fx - 1];
}
}
}
for(int i = 1;i <= 8;i++)
{
for(int j = 1;j <= 8;j++)
{
cout << mapp[i][j];
}
cout << endl;
}
return 0;
}
if(s == "move"){
cin >> tmp;
go(nx,ny,tmp,fx);
}
else{
cin >> s;
if(s == "left"){
left(fx);
}
else if(s == "right"){
right(fx);
}
else if(s == "back"){
if(fx == 1)fx = 2;
else if(fx == 2)fx = 1;
else if(fx == 3)fx = 4;
else if(fx == 4)fx = 3;
}
}
}
return 0;
}