公式

C - Grid Walk 解説 by cn449


現在高橋君がいるマスを管理しながら、ルールに従って行動をシミュレートすればよいです。

上下左右のマスが存在するかの判定のためには、現時点で上下左右の端にいるかの判定を行うか、下記の実装例のように移動先がグリッドの範囲内にあるかの判定を行うなどの方法があります。

実装例

#include <bits/stdc++.h>
using namespace std;

int main() {
	int h, w;
	cin >> h >> w;
	int si, sj;
	cin >> si >> sj;
	si--; sj--;
	vector<vector<char>> c(h, vector<char>(w));
	for (int i = 0; i < h; i++) for (int j = 0; j < w; j++) cin >> c[i][j];
	string x;
	cin >> x;
	for (char o : x) {
		int ni = si, nj = sj;
		if (o == 'L') nj--;
		else if (o == 'R') nj++;
		else if (o == 'U') ni--;
		else ni++;
		if (0 <= ni && ni < h && 0 <= nj && nj < w && c[ni][nj] == '.') {
			si = ni, sj = nj;
		}
	}
	cout << si + 1 << ' ' << sj + 1 << '\n';
}

投稿日時:
最終更新: