输入数据后,自动生成地图,通过 NSEW 控制移动。
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 2e3 + 5, M = 1e3;
struct Map {
char c[N][N]; int mni = M, mxi = M, mnj = M, mxj = M, nx = M, ny = M;
void change(int &i, int &j, char c) {
if(c == 'N') i--;
if(c == 'S') i++;
if(c == 'E') j++;
if(c == 'W') j--;
}
void print(bool b = 1) {
for(int i = mni; i <= mxi; i++, cout<<endl) for(int j = mnj; j <= mxj; j++)
if(b && i == nx && j == ny) cout<<'*'<<" ";
else cout<<c[i][j]<<" ";
}
void init(string s) {
for(int i = 0; i <= N - 5; i++) for(int j = 0; j <= N - 5; j++) c[i][j] = ' ';
c[M][M] = '!';
for(int i = M, j = M, k = 0; k < s.length(); k++) {
change(i, j, s[k]);
mni = min(mni, i), mxi = max(mxi, i), mnj = min(mnj, j), mxj = max(mxj, j);
c[i][j] = '.';
}
}
void move(char c) {
change(nx, ny, c);
}
} x, y;
int n, i, j; string a, b; char c;
char change(char c) {
if(c == 'N') return 'S';
if(c == 'S') return 'N';
if(c == 'E') return 'W';
if(c == 'W') return 'E';
}
signed main() {
system("cls");
cin>>n>>a>>b;
x.init(a), y.init(b);
x.print(0), cout<<endl, y.print(0);
while(1) {
cin>>c;
if(c != 'N' && c != 'S' && c != 'E' && c != 'W') break;
if(i < a.length() && a[i] == c) x.move(c), i++;
if(i && change(a[i - 1]) == c) x.move(c), i--;
if(j < b.length() && b[j] == c) y.move(c), j++;
if(j && change(b[j - 1]) == c) y.move(c), j--;
system("cls");
cout<<a<<endl<<b<<endl;
x.print(), cout<<endl, y.print();
}
}
/*
7
NNESWW
SWSWSW
*/