全部评论 5

  • 看拒接拒接拒接拒接拒接拒接拒接

    18分钟前 来自 浙江

    0
  • 加入阿瓦达索命和除你武器,更好

    52分钟前 来自 浙江

    0
  • 给你个思路:
    1.先遍历地图,找到起点 E(哈利初始位置)和办公室 Q(终点)

    2.伏地魔初始在哈利正后方一格,两人速度相同(1 格 / 秒)

    3.哈利只能走上下左右通路 S,不能走死路 X

    4.BFS 搜索哈利到终点的最短时间

    5.伏地魔走最优路线,只要哈利到达终点的时间 ≤ 伏地魔到达终点的时间,哈利就能成功逃跑;否则被杀

    2小时前 来自 广东

    0
  • 广度优先搜索(BFS)

    2小时前 来自 广东

    0
  • #include <bits/stdc++.h>
    using namespace std;
    const int MAX = 105;      
    char mp[MAX][MAX];         
    int vis[MAX][MAX];         
    int dx[] = {-1, 1, 0, 0};
    int dy[] = {0, 0, -1, 1};
    int n;
    int ex, ey;    
    int qx, qy;   
    int vx, vy;    
    int bfs(int sx, int sy, int tx, int ty) {
    	memset(vis, 0, sizeof(vis)); 
    	queue<pair<pair<int, int>, int>> q;
    	q.push({{sx, sy}, 0});
    	vis[sx][sy] = 1;
    	while (!q.empty()) {
    		auto now = q.front();
    		q.pop();
    		int x = now.first.first;
    		int y = now.first.second;
    		int t = now.second;
    		if (x == tx && y == ty) {
    			return t;
    		}
    		for (int i = 0; i < 4; i++) {
    			int nx = x + dx[i];
    			int ny = y + dy[i];
    			if (nx >= 0 && nx < n && ny >= 0 && ny < n && !vis[nx][ny] && mp[nx][ny] != 'X') {
    				vis[nx][ny] = 1;
    				q.push({{nx, ny}, t + 1});
    			}
    		}
    	}
    	return -1;
    }
    int main() {
    	cin >> n;
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < n; j++) {
    			cin >> mp[i][j];
    			if (mp[i][j] == 'E') {
    				ex = i;
    				ey = j;
    			}
    			if (mp[i][j] == 'Q') {
    				qx = i;
    				qy = j;
    			}
    		}
    	}
    	vx = ex + 1;
    	vy = ey;
    	int pro = bfs(ex, ey, qx, qy);
    	int killer = bfs(vx, vy, qx, qy);
    	if (pro == -1) {
    		cout << "被杀了" << endl;
    	} else {
    		if (pro <= killer) {
    			cout << pro << endl;
    		} else {
    			cout << "被杀了" << endl;
    		}
    	}
    }
    

    2小时前 来自 广东

    0

热门讨论