求助!! ! 40pts!
  • 板块学术版
  • 楼主Myth_ology
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/9/13 20:00
  • 上次更新2023/10/27 11:43:23
查看原帖
求助!! ! 40pts!
648959
Myth_ology楼主2022/9/13 20:00
#include<bits/stdc++.h>
using namespace std;
#define N 1250
const int dx[]={1,-1,0,0,1,-1,1,-1,2,-2,0,0};
const int dy[]={0,0,1,-1,1,1,-1,-1,0,0,2,-2}; 
int n,ans,tim[N][N];
char s[N][N];

int main(){
	scanf("%d",&n);
	for(int i = 1;i <= n;++ i){
		for(int j = 1;j <= n;++ j){
			cin>>s[i][j];tim[i][j]=2147483647;
		}
	}
	queue<pair<int ,int > > q;
	if(s[1][1]=='*'&&s[1][n]=='*'&&s[n][1]=='*'||s[n][n]=='*'){
		printf("No answer");return 0;
	}
	if(s[1][1]!='*')q.push(make_pair(1,1)),tim[1][1]=1;
	if(s[1][n]!='*')q.push(make_pair(1,n)),tim[1][n]=1;
	if(s[n][1]!='*')q.push(make_pair(n,1)),tim[n][1]=1;
	while(!q.empty()){
		int x=q.front().first,y=q.front().second;q.pop();
		if(s[x][y]=='*')continue;
		else if(s[x][y]=='A'){
			for(int i=0;i<4;i++){
				int xx=x+dx[i]*(s[x][y]-'A'+1),yy=y+dy[i]*(s[x][y]-'A'+1);
				if(xx<1||xx>n||yy<1||yy>n||s[xx][yy]!='*'||tim[xx][yy]<=tim[x][y]+1)continue;
				tim[xx][yy]=tim[x][y]+1;
				q.push(make_pair(xx,yy));
			}
		}
		else if(s[x][y]=='B'){
			for(int i=8;i<12;i++){
				int xx=x+dx[i]*(s[x][y]-'A'+1),yy=y+dy[i]*(s[x][y]-'A'+1);
				if(xx<1||xx>n||yy<1||yy>n||s[xx][yy]!='*'||tim[xx][yy]<=tim[x][y]+1)continue;				
				tim[xx][yy]=tim[x][y]+1;
				q.push(make_pair(xx,yy));
			}
		}
		else{
			for(int i=4;i<8;i++){
				int xx=x+dx[i],yy=y+dy[i];
				if(xx<1||xx>n||yy<1||yy>n||s[xx][yy]!='*'||tim[xx][yy]<=tim[x][y]+1)continue;
				tim[xx][yy]=tim[x][y]+2;
				q.push(make_pair(xx,yy));
			}
		}
	}
	if(tim[n][n]!=2147483647){cout<<tim[n][n];}
	else{printf("No answer");}
	return 0;
}

WA了4个,求大佬挑错

2022/9/13 20:00
加载中...