P1735七十分求助!!
  • 板块灌水区
  • 楼主a_tall_bird
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/2/27 19:50
  • 上次更新2024/2/27 21:40:33
查看原帖
P1735七十分求助!!
1074321
a_tall_bird楼主2024/2/27 19:50

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

#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:50
加载中...