请求评价我的做法。。。
查看原帖
请求评价我的做法。。。
917025
XYzero楼主2023/9/21 21:02

感觉硬打出了蓝题的难度。。。

#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;
}

2023/9/21 21:02
加载中...