P7185 题解
本题有
注意到输入将保证解决方案存在并且是唯一的,所以只需要考虑哪个地方可以放即可。如果它可以放在这个位置,那么它肯定会被放。
那么只需要
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define up(x, y) (x > 1 && (ch[x-1][y] == '|' || ch[x-1][y] == '+' || ch[x-1][y] == '1' || ch[x-1][y] == '4'))
#define down(x, y) (x < n && (ch[x+1][y] == '|' || ch[x+1][y] == '+' || ch[x+1][y] == '2' || ch[x+1][y] == '3'))
#define left(x, y) (y > 1 && (ch[x][y-1] == '-' || ch[x][y-1] == '+' || ch[x][y-1] == '1' || ch[x][y-1] == '2'))
#define right(x, y) (y < m && (ch[x][y+1] == '-' || ch[x][y+1] == '+' || ch[x][y+1] == '3' || ch[x][y+1] == '4'))
int n, m;
char ch[26][26];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i(1); i<=n; ++i){
for (int j(1); j<=m; ++j) cin >> ch[i][j];
}
for (int i(1); i<=n; ++i){
for (int j(1); j<=m; ++j){
if (ch[i][j] != '.') continue;
if (up(i, j) && down(i, j) && left(i, j) && right(i, j)) cout << i << ' ' << j << " +";
else if (right(i, j) && left(i, j)) cout << i << ' ' << j << " -";
else if (up(i, j) && down(i, j)) cout << i << ' ' << j << " |";
else if (down(i, j) && right(i, j)) cout << i << ' ' << j << " 1";
else if (up(i, j) && right(i, j)) cout << i << ' ' << j << " 2";
else if (up(i, j) && left(i, j)) cout << i << ' ' << j << " 3";
else if (down(i, j) && left(i, j)) cout << i << ' ' << j << " 4";
}
}
return 0;
}