WA+RE+MLE 8pts求助
查看原帖
WA+RE+MLE 8pts求助
1059176
Quartz_Blocks楼主2024/6/2 09:23

8pts求调 代码如下 提交记录

#include <iostream>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <queue>
#include <cstring>
using namespace std;
char mp[110][110];
int dx[4] = {0,0,-1,1};
int dy[4] = {1,-1,0,0};
struct node{
	int x,y,step;
};
queue <node> q;
int n,m;
int bfs(node s,node e){
	bool end[110][110];
	bool vis[110][110];
	memset(end,0,sizeof(end));
	memset(vis,0,sizeof(vis));
	for(int i = e.x;i >= 0 && mp[i][e.y] != 'X';i--) end[i][e.y] = 1;
	for(int i = e.x;i < n && mp[i][e.y] != 'X';i++) end[i][e.y] = 1;
	for(int i = e.x,j = e.y;i >= 0 && j >= 0;i--,j--){
		if(mp[i][j] != 'X') end[i][j] = 1;
		else break;
	}
	for(int i = e.x,j = e.y;i < n && j >= 0;i++,j--){
		if(mp[i][j] != 'X') end[i][j] = 1;
		else break;
	}
	for(int i = e.x,j = e.y;i >= 0 && j < m;i--,j++){
		if(mp[i][j] != 'X') end[i][j] = 1;
		else break;
	}
	for(int i = e.x,j = e.y;i < n && j < m;i++,j++){
		if(mp[i][j] != 'X') end[i][j] = 1;
		else break;
	}
	for(int i = e.y;i >= 0 && mp[e.x][i] != 'X';i--) end[e.x][i] = 1;
	for(int i = e.y;i < m && mp[e.x][i] != 'X';i++) end[e.x][i] = 1;
	/*cout << endl;
	for(int i = 0;i < n;i++){
		for(int j = 0;j < m;j++){
			if(s.x == i && s.y == j){
				cout << "st "; 
				continue;
			}else if(e.x == i && e.y == j){
				cout << "ed ";
				continue;
			}
			cout << mp[i][j] << end[i][j] << ' ';
		}
		cout << endl;
	  }*/
	if(end[s.x][s.y]) return 0;
	if(s.x == e.x && s.y == e.y) return 0;
	q.push(s);
	vis[s.x][s.y] = 1;
	while(!q.empty()){
		node u = q.front();
		q.pop();
		for(int i = 0;i < 4;i++){
			node v = u;
			v.x = u.x + dx[i];
			v.y = u.y + dy[i];
			v.step++;
			if(v.x < 0 || v.x >= n || v.y < 0 || v.y >= m) continue;
			if(mp[v.x][v.y] == 'X') continue;
			if(vis[v.x][v.y]) continue;
			q.push(v);
			if(end[v.x][v.y]){
				return v.step;
			}
			vis[v.x][v.y] = 1;
		}
	}
	return -1;
}
int main(){
	ios::sync_with_stdio(0);
	cin >>n >>m;
	for(int i  = 0;i < n;i++){
		cin >> mp[i];
	}
	int sx,sy,ex,ey;
	while(cin >>sx >>sy >> ex >> ey){
		if(sx == 0){
			break;
		}
		int res = bfs(node{sx-1,sy-1,0},node{ex-1,ey-1});
		if(res == -1){
			cout <<"Poor Harry\n";
		}else{
			cout <<res << endl;
		}
		
	}
	return 0;
}
2024/6/2 09:23
加载中...