问题
https://vjudge.net/problem/UVA-1419
分析
注意嵌套的情况:
5 5
AAAAA
ABBBA
AB.BA
ABBBA
AAAAA
0 0
B
参考:https://www.cnblogs.com/zjbztianya/archive/2013/04/08/3006581.html
最上层的框内只有点,没有字符
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;
const int maxn=105;
char s[maxn][maxn];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int m,n,flag[30];
inline bool inside(int x,int y){
return x>=0 && x<n && y>=0 && y<m;
}
inline bool insideCh(int x,int y,int row,int col){
for(int i=x+1;i<x+row;++i){
for(int j=y+1;j<y+col;++j){
if(s[i][j]!='.') return false;
}
}
return true;
}
int main(void){
while(scanf("%d%d",&n,&m)==2 && n){
for(int i=0;i<n;++i) scanf("%s",s[i]);
memset(flag,0,sizeof(flag));
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(s[i][j]=='.') continue;
int t=s[i][j]-'A',nx=i,ny=j,row=0,col=0;
char c=s[i][j];
if(flag[t]!=0) continue;
for(int k=0;k<4;++k){
while(inside(nx+dx[k],ny+dy[k]) && s[nx+dx[k]][ny+dy[k]]==c){
nx+=dx[k];
ny+=dy[k];
}
if(k==1) {row=nx-i; col=ny-j;}
}
if(nx==i && ny==j && row>=2 && col>=2 && insideCh(i,j,row,col)) flag[t]=1;
else flag[t]=-1;
}
}
for(int i=0;i<26;++i) if(flag[i]==1) printf("%c",'A'+i);
printf("\n");
}
return 0;
}