记录编号 |
560166 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HAOI 2021PJ]水儿的绘画 |
最终得分 |
100 |
用户昵称 |
yrtiop |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2021-04-14 18:55:41 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn = 55;
const int INF = 0x3f3f3f3f;
int c[maxn][maxn];
char s[maxn][maxn];
int n,m,f = 0;
bool judge(int x,int y) {
return x >= 1&&x <= n&&y >= 1&&y <= m&&s[x][y] == 'X';
}
void dfs(int x,int y,int C) {
c[x][y] = C;
if(judge(x + 1 , y)&&!c[x + 1][y])dfs(x + 1 , y , C);
if(judge(x , y + 1)&&!c[x][y + 1])dfs(x , y + 1 , C);
if(judge(x - 1 , y)&&!c[x - 1][y])dfs(x - 1 , y , C);
if(judge(x , y - 1)&&!c[x][y - 1])dfs(x , y - 1 , C);
return ;
}
int ABS(int x) {
return x > 0 ? x : -x;
}
int main() {
freopen("haoi2021pj_paint.in","r",stdin);
freopen("haoi2021pj_paint.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;++ i) {
scanf("%s",s[i] + 1);
}
for(int i = 1;i <= n;++ i) {
if(f >= 2)break ;
for(int j = 1;j <= m;++ j) {
if(f >= 2)break ;
if(s[i][j] == 'X'&&!c[i][j]) {
dfs(i , j , ++ f);
}
}
if(f >= 2)break ;
}
// for(int i = 1;i <= n;++ i) {
// for(int j = 1;j <= m;++ j) {
// printf("%d",c[i][j]);
// }
// putchar('\n');
// }
int ans = n * m;
for(int i = 1;i <= n;++ i) {
for(int j = 1;j <= m;++ j) {
if(c[i][j] == 1) {
for(int q = 1;q <= n;++ q) {
for(int k = 1;k <= m;++ k) {
if(c[q][k] == 2) {
ans = min(ans , ABS(q - i) + ABS(k - j) - 1);
}
}
}
}
}
}
printf("%d",ans);
fclose(stdin);
fclose(stdout);
return 0;
}