题目描述
年轻的拉尔夫开玩笑地从一个小镇上偷走一辆车,但他没想到的是那车属于警察局。并且车上装有用于发射车子移动路线的装置。那个装置太旧了,以至于只能发射关于那辆车的移动路线的方向信息。
通过使用一张小镇的地图,帮助警察局找到那车。表示出该车最终所有可能的位置。
小镇的地图是矩形的,上面的符号用来标明那儿可以行车和那儿不行。“.” 表示小镇上那块地方是可以行车的,符号 “X” 表示此处不能行车。拉尔夫所开小车的初始位置,用字符的 “∗”,表示,且汽车能从初始位置通过。汽车能向四个方向移动:向北(上),南(下),西(左),东(右);拉尔夫所开小车的行动路线是通过一组给定的方向来描述的,在每个给定的方向,拉尔夫驾驶小车通过小镇上的一个或更多的可行车地点。
输入
第一行两个整数 n,m,表示小镇地图大小。(1≤n,m≤50)
接下来是一个 n∗m 的矩阵,由 .∗X 组成,表示小镇的地图。
再接下来一行一个整数 N(1≤N≤1000),表示接下来有 N 个方向。
接下来 N 行,每行一个方向单词,NORTH,SOUTH,WEST,EAST 分别表示上下左右,代表汽车的移动方向,任何两个连续的方向都不相同。
输出
输出小镇的地图,在地图上,汽车最终可能出现的点用 ∗ 来表示。
样例输入
4 5 ..... .X... ...*X X.X.. 3 NORTH WEST SOUTH
样例输出
..... *X*.. *.*.X X.X..
数据规模与约定
时间限制:1 s
内存限制:256 M
100% 的数据保证 1≤n,m≤50
#include <iostream> #include <string> #include <cstring> #include <queue> using namespace std; int n, m, check[55][55]; char map[55][55]; struct node { int x, y; }; queue<node> que; int dir[4][2] = { -1,0,1,0,0,-1,0,1 }; int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> map[i][j]; if (map[i][j] == '*') { check[i][j] = 1; map[i][j] = '.'; que.push({ i,j }); } } } int N; cin >> N; while (N--) { string s; cin >> s; int dir_num; memset(check, 0, sizeof(check)); if (s == "NORTH") { dir_num = 0; } else if (s == "SOUTH") { dir_num = 1; } else if (s == "WEST") { dir_num = 2; } else { dir_num = 3; } int times = que.size(); for (int i = 0; i < times; i++) { node temp = que.front(); que.pop(); for (int j = 1; 1; j++) { int x = temp.x + j * dir[dir_num][0]; int y = temp.y + j * dir[dir_num][1]; if (map[x][y] != '.') break; if (!check[x][y]) { check[x][y] = 1; que.push({ x,y }); } } } } while (!que.empty()) { node temp = que.front(); que.pop(); map[temp.x][temp.y] = '*'; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cout << map[i][j]; } cout << endl; } return 0; }
原文链接:https://blog.csdn.net/qq_40713201/article/details/123718165?ops_request_misc=&request_id=0f88c144f7b144fc83faf49c520a5892&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~koosearch~default-16-123718165-null-null.268%5Ev1%5Econtrol&utm_term=%E8%A5%BF%E5%AE%89%E6%91%A9%E6%89%98%E8%BD%A6