求助
查看原帖
求助
380042
piggy123楼主2021/8/8 15:45

#3RE

#include <iostream>
using namespace std;

string s[30], anchor="right";
bool v[30][30][16]={0};
int r,c,reg=0;

int dfs(int x,int y){
	cout << x << " " << y << " " << reg << " " << anchor << endl;
	if (s[x][y]=='@'){
		
		return 0;
	}
	if (v[x][y][reg]){
		
		return 1;
	}
	v[x][y][reg]=1;
	switch (s[x][y]){
		case '<':
			anchor="left";
			break;
		case '>':
			anchor="right";
			break;
		case '^':
			anchor="up";
			break;
		case 'v':
			anchor="down";
			break;
		case '_':
			if (reg==0){
				anchor="right";
			}else{
				anchor="left";
			}
			break;
		case '|':
			if (reg==0){
				anchor="down";
			}else{
				anchor="up";
			}
			break;
		case '?':
			anchor="all";
			break;
		case '+':
			reg+=1;
			if (reg>15)reg=0;
			break;
		case '-':
			reg-=1;
			if (reg<0)reg=15;
			break;
		default:
			if (s[x][y]>='0'&&s[x][y]<='9'){
				reg=s[x][y]-'0';
			}
	}
	if (anchor=="left"){
		if (y>0)
			return dfs(x,y-1);
	} else if (anchor=="right"){
		if (y+1==c&&x+1<r){
			return dfs(x+1,0);
		} else if (y<c-1){
			return dfs(x,y+1);
		}
	} else if (anchor=="up"){
		if (x>0)
			return dfs(x-1,y);
	} else if (anchor=="down"){
		if (x<r-1)
			return dfs(x+1,y);
	} else{
		if(x>0&&!dfs(x-1,y))return 0;
		if(x<r-1&&!dfs(x+1,y)) return 0;
		if(y>0&&!dfs(x,y-1))return 0;
		if(y<c-1&&!dfs(x,y+1)) return 0;
	}
}

int main(){
	cin >> r >> c;
	for (int i=0;i<r;i++){
		cin >> s[i];
	} 
	if (dfs(0,0))cout << "NO" <<endl;
	else cout << "YES" << endl;
	return 0;
}
2021/8/8 15:45
加载中...