为啥错??
查看原帖
为啥错??
998650
OTH_chinese_dragon楼主2024/8/13 19:54
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
typedef pair<int, int>PII;
const int N = 1010;
char g[N][N];
int d[N][N];
int n, m, qx, qy, zx, zy;

int bfs(){
	memset(d, -1, sizeof d);
	queue<PII>q;
	q.push({qx, qy});
	int dx[8] = {1,1,-1,-1,2,2,-2,-2}, dy[8] = {2,-2,2,-2,1,-1,1,-1};
	
	while(!q.empty()){

		PII t = q.front();
		q.pop();

		for(int i = 0; i < 8; i ++){
			int x = t.first + dx[i], y = t.second + dy[i];
			if(x >= 0 && x < zx && y >= 0 && y < zy && d[x][y] == -1 && g[x][y] != '*'){
                q.push({x, y});
				d[x][y] = d[t.first][t.second] + 1;
			}
		}
	}
	return d[zx - 1][zy - 1];
}
int main(){
	cin >> n >> m;
	for(int i = 0; i < n; i ++){
		for(int j = 0; j < m; j ++){
			cin >> g[i][j];
			if(g[i][j]=='K'){
				qx=i;
				qy=j;
				d[i][j]=0;
			}else if(g[i][j]=='H'){
				zx=i;
				zy=j;
			}
		}
	}
	cout << bfs() << endl;
	return 0;
}
2024/8/13 19:54
加载中...