这思路哪里有问题,为啥就过了83.33%

#include <bits/stdc++.h> 

using ll = long long;
char g[500][500];
bool vis[500][500];
const int dx[] {0, 1, 0, -1}, dy[] {-1, 0, 1, 0};

signed main() {
    int n, m, p, k;
    std::cin >> n >> m >> p >> k;
    
    int stx = 0, sty = 0;
    for (int i = 1; i <= n; i++) {
    	for (int j = 1; j <= m; j++) {
    		std::cin >> g[i][j];
    		if (g[i][j] == 's') {
    			stx = i, sty = j;
    		} 
    	}
    }

    std::queue<std::array<int ,4>> q;
    q.push({stx, sty, p, k});
    vis[stx][sty] = true;
    while (q.size()) {
    	auto [x, y, z, u] = q.front();
    	q.pop();

    	if (g[x][y] == 'e' && z >= 0 && u >= 0) {
    		std::cout << "YES\n";
    		return 0;
    	}

    	for (int i = 0; i < 4; i++) {
    		int a = dx[i] + x, b = dy[i] + y, c = z - 1, d = u;
    		if (a >= 1 && b >= 1 && a <= n && b <= m) {
    			if (vis[a][b] || g[a][b] == 'w') continue ;
    			if (g[a][b] == 'd') d = u - 1;
    			q.push({a, b, c, d});
    			vis[a][b] = true;
    		}
    	}
    }
    std::cout << "NO\n";

    return 0;
}

全部评论

相关推荐

阿武同学:基本信息保留前面三行,其他的可以全部删掉,邮箱最重要的你没写,主修课程精简到8个以内,实习里面2/3/4都是水内容的,非要写的话建议两到三句话,项目经历排版优化下,自我评价缩到三行
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务