70分求助!WA了三个点
查看原帖
70分求助!WA了三个点
1074321
a_tall_bird楼主2024/2/27 19:47

首先声明,我不会广搜,所以只好用深搜了

#include<bits/stdc++.h>
using namespace std;
char _map[1201][1201];
bool _feet[1201][1201];
long long minn=LONG_LONG_MAX,n;
void dfs(long long step,int x,int y){
	if(step>=minn)return ;
	if(_map[x][y]=='*'||x>n||y>n||x==0||y==0){
		return ;
	}
	if(x==n&&y==n){
		minn=min(minn,step);
		return ;
	}
	if(_map[x][y]=='A'){
		if(_feet[x+1][y]==0){
			_feet[x+1][y]=1;
			dfs(step+1,x+1,y);
		}
		if(_feet[x-1][y]==0){
			_feet[x-1][y]=1;
			dfs(step+1,x-1,y);
		}
		if(_feet[x][y-1]==0){
			_feet[x][y-1]=1;
			dfs(step+1,x,y-1);
		}
		if(_feet[x][y+1]==0){
			_feet[x][y+1]=1;
			dfs(step+1,x,y+1);
		}
	}
	else if(_map[x][y]=='B'){
		
		if(_feet[x+2][y]==0&&x+2<=n){
			_feet[x+2][y]=1;
			dfs(step+1,x+2,y);
		}
		if(_feet[x-2][y]==0&&x-2>=0){
			_feet[x-2][y]=1;
			dfs(step+1,x-2,y);
		}
		if(_feet[x][y-2]==0&&y-2>=0){
			_feet[x][y-2]=1;
			dfs(step+1,x,y-2);
		}
		if(_feet[x][y+2]==0&&y+2<=n){
			_feet[x][y+1]=1;
			dfs(step+1,x,y+2);
		}
	}
	else if(_map[x][y]=='C'){
		if(_feet[x+1][y+1]==0){
			_feet[x+1][y+1]=1;
			dfs(step+2,x+1,y+1);
		}
		if(_feet[x+1][y-1]==0){
			_feet[x+1][y-1]=1;
			dfs(step+2,x+1,y-1);
		}
		if(_feet[x-1][y+1]==0){
			_feet[x-1][y+1]=1;
			dfs(step+2,x-1,y+1);
		}
		if(_feet[x-1][y-1]==0){
			_feet[x-1][y-1]=1;
			dfs(step+2,x-1,y-1);
		}
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>_map[i][j];
		}
	}
	_feet[1][1]=1;
	dfs(1,1,1);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			_feet[i][j]=0;
		}
	}
	_feet[1][n]=1;
	dfs(1,1,n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			_feet[i][j]=0;
		}
	}
	_feet[n][1]=1;
	dfs(1,n,1);
	if(minn!=LONG_LONG_MAX)cout<<minn;
	else cout<<"No answer";
}
2024/2/27 19:47
加载中...