題目描述
OY是什麼意思?那麼oyt你知不知道呢
(這拼音首字母真的是一點加密性都沒有)
沒錯,OY就是這個意思(某人的姓),那麼你能分得清“O”怎麼寫和“Y”怎麼寫嗎?
在計算機裏,可以用0代表無色,用1代表黑色,這樣對上面的圖片進行處理就變成了下圖。
那麼問題來了,給出這樣的01矩陣,你能否判斷它是“O”還是“Y”呢?
你可能會說這太簡單了(應該會說吧……),所以爲了加大難度,給出矩陣所展示的圖形可能是經過旋轉、拉伸、平移、縮放之後的。
輸入
第一行是一個整數TT,代表有T組測試數據。
對於每組數據,第一行是兩個整數nn,mm,代表這個n×mn×m矩陣的大小。
下面有nn行mm列描述這個只含0、1的矩陣。
保證圖案只有“O”、“Y”,並且有正確結果。
1≤T≤1001≤T≤100
1≤n,m≤201≤n,m≤20
輸出
如果圖案爲“O”,輸出“O”。
如果圖案爲“Y”,輸出“Y”。
樣例輸入
2
13 9
000000000
000111000
001000100
010000010
010000010
010000010
010000010
010000010
010000010
010000010
001000100
000111000
000000000
13 9
000000000
010000010
001000100
000101000
000010000
000010000
000010000
000010000
000010000
000010000
000010000
000010000
000000000
樣例輸出
O
Y
#include<stdio.h>
#include<string.h>
char matrix[22][22];
int n,m;
void DFS(int,int);
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(matrix,'0',sizeof(matrix));
scanf("%d %d",&n,&m);
getchar();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%c",&matrix[i][j]);
if(j==m) getchar();
}
DFS(0,0);
int flag=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(matrix[i][j]=='0')
{
flag=1;
break;
}
if(flag) printf("O\n");
else printf("Y\n");
}
return 0;
}
void DFS(int x,int y)
{
matrix[x][y]='1';
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0} ;//向與該點相鄰的點順時針搜索(右、下、左、上)
for(int i=0;i<4;i++)
{
int DX=x+dx[i],DY=y+dy[i];
if(DX>=0&&DX<=n+1&&DY>=0&&DY<=m+1&&matrix[DX][DY]=='0')
{
DFS(DX,DY);
}
}
}