本文主要是介绍小黑屋的救赎,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
H-小黑屋的救赎_浙江机电职业技术学院第八届新生亮相赛(同步赛) (nowcoder.com)
非常经典的一道广搜题
#include <iostream>
#include <string>
#include <stack>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cmath>
#define ll long long
using namespace std;
typedef pair<int, int> PII;char arr[15][15];
int n, m, p, k, si, sj;
int dir[4][2] = { {0, -1}, {0, 1}, {1, 0}, {-1, 0} };
int main() {cin >> n >> m >> p >> k;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> arr[i][j];if (arr[i][j] == 's') {si = i, sj = j;}}}vector<vector<int>> st(n + 10, vector<int>(n + 10, 0));queue<vector<int>> q;q.push({ si, sj, p, k });st[si][sj] = 1;while (!q.empty()) {int size = q.size();while (size--) {vector<int> v = q.front();q.pop();int x = v[0], y = v[1], p = v[2], k = v[3];for (int i = 0; i < 4; i++) {int xx = x + dir[i][0];int yy = y + dir[i][1];if (xx < 1 || xx > n || yy < 1 || yy > m || st[xx][yy]) continue;if (arr[xx][yy] == 'w') continue;if (arr[xx][yy] == 'e' && p > 0) return cout << "YES", 0;if (arr[xx][yy] == 'd' && p > 1 && k > 0) {q.push({ xx, yy, p - 1, k - 1 });}else if (arr[xx][yy] == 'r' && p > 1) {q.push({ xx, yy, p - 1, k });}st[xx][yy] = 1;}}}cout << "NO";return 0;
}
这篇关于小黑屋的救赎的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!