1210: OY問題 [搜索]

題目描述
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);
         }
     }  
}
發佈了40 篇原創文章 · 獲贊 51 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章