90分?wa了一个点
查看原帖
90分?wa了一个点
797793
jdm__chico_guopo楼主2024/10/16 13:03
#include<bits/stdc++.h>
using namespace std;
char g[160][160];
int n,m;
int dis[160][160];
int dx[8]={-1,1,2,2,1,-1,-2,-2},dy[8]={2,2,1,-1,-2,-2,1,1};
struct XX{
	int x,y;
};
queue <XX>q;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin>>m>>n;
	int sx,sy,ex,ey;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>g[i][j];
			if(g[i][j]=='K'){
				sx=i;
				sy=j;
			}
		}
	}
	
	q.push(XX{sx,sy});
	memset(dis,-1,sizeof(dis));
	dis[sx][sy]=0;
	bool flag=0;
	while(!q.empty()){
		int ax=q.front().x;
		int ay=q.front().y;
		q.pop();
		int t=dis[ax][ay];
		
		for(int i=0;i<8;i++){
			int nx=ax+dx[i];
			int ny=ay+dy[i];
			
			if(nx<1||ny<1||nx>n||ny>m)continue;
			if(g[nx][ny]=='*')continue;
			if(dis[nx][ny]!=-1)continue;
			
			
			if(g[nx][ny]=='H'){
				cout<<t+1;
				return 0;
			}
			dis[nx][ny]=t+1;
			q.push(XX{nx,ny});
		}

	}
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++){
//			cout<<dis[i][j]<<" ";
//		}		
//		cout<<endl;
//	}
	return 0;
}
2024/10/16 13:03
加载中...