admin 管理员组

文章数量: 894188

A?H?

题目描述

目前图像识别是一项非常热门的技术,最流行莫不过是深度学习,识率甚至能达到 99\% 以上。当然,对于简单的图像来说深度学习是没有必要的。比如要识别安徽拼音首字母 A和H,就可以不用深度学习就可以判断。现在有一些只含 A或者H的图像,,你知道该如何识别吗?

输入

第一行输入 正整数 T,表示数据的组。每组数据中,第一行是两个正整n和 m,$n \le 100$,$m \le 100$,表示图像的大小。接下来有 n行 ,每行m个字符,只可能为 ‘.’ 或者 ‘#’ 。‘.’ 表示白色, ‘#’ 表示黑色。 ‘#’ 会通过上下左右或者连成一个区域,表示A或H字母。
数据保证字母在图像内 ,不会有缺失。数据保证图像里只含有A或者H,且除字母外无其它黑色区域。不存在空白 图像或者含有其它内容的数据。注意,字母不一定是正着的有可能斜横或者倒。特别提示:图像一定是白底黑字的,不会存在反色情况。

输出

对于每行数据, 输出 ‘Case t: X ’,X表示你所识别出来的字母

样例输入

1
3 6
######
..#.#.
...#..

样例输出

Case 1: A

题解

#include <iostream>
#include <cstring>using namespace std;
char a[500][500];
int n,m;
int nx[4]={0,0,1,-1};
int ny[4]={1,-1,0,0};
void dfs(int x,int y){a[x][y]='#';for (int k = 0; k <=3; k++) {int tx=x+nx[k];int ty=y+ny[k];if(tx<0 || tx>n+1 || ty<0 || ty>m+1 || a[tx][ty] =='#') continue;dfs(tx,ty);}
}
int main() {int T;cin>>T;int t=0;while (T--){t++;memset(a,'.', sizeof(a));cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}dfs(0,0);int flag=0;for(int i=0;i<=n+1;i++){for(int j=0;j<=m+1;j++){if (a[i][j]=='.'){flag=1;break;}}if(flag==1) break;}if(flag==1){cout<<"Case "<<t<<": A"<<endl;} else{cout<<"Case "<<t<<": H"<<endl;}}return 0;
}

本文标签: AH