2011年8月18日 星期四

d626: 小畫家真好用

內容 :
    Windows的小畫家真好用!
    (至少在處理PrintScreen方面蠻快的…)
    大家都知道
    小畫家裡面有一種繪圖工具
    叫做油漆桶工具
    只要選定你要的顏色、油漆的地點就可以進行填色
    油漆桶的填色範圍是取決於"同色塊相鄰"的原則
    現在請你模擬這項工具

輸入說明 :
    每個測資點只有一筆測資。
    第一行有整數n(1<=n<=100)表示這張圖的大小是(n*n)個字元
    接下來的n行,每行n個字元表示這張圖的樣子。
    只有+、-兩種字元組成(兩種顏色的意思)
    在最後一行,有兩個整數i,j表示油漆桶點擊的地點是第(i+1)列第(j+1)個字元,
    [
    假設有圖如下3*3:
    012
    0---
    1-+-
    2-++
    那麼0,2就表示這格:
    012
    0--*
    1-+-
    2-++
    ]
    請視選取的顏色為+,選取的位置原本的顏色必為-
    並且墨水只會利用上下左右四個方位擴散

輸出說明 :
    請直接輸出經過油漆桶塗色後的圖案

範例輸入 :
7
-------
-+++---
-+--+--
-+---+-
--+++--
---++--
-------
3 4

範例輸出 :
-------
-+++---
-++++--
-+++++-
--+++--
---++--
-------

提示 :
測資給定的i,j是0,0…嘿嘿嘿

程式碼 :
#include<stdio.h>
int n;
char map[101][101];

void print(int a, int b)
{
    if(a<0 || b<0 || a==n || b==n)
        return ;
    if(map[a][b] == '+')
        return ;
    map[a][b] = '+';
    print(a+1,b);
    print(a-1,b);
    print(a,b+1);
    print(a,b-1);
}

int main()
{
    int a,b,i,j;
        
    while(scanf("%d",&n)==1)
    {
        for(i=0; i<n; i++)
            for(j=0; j<n; j++)
                scanf(" %c",&map[i][j]);

        scanf("%d %d",&a,&b);
        
        print(a,b);
        
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
                printf("%c",map[i][j]);
            printf("\n");
        }
    }    
    return 0;
}




http://zerojudge.tw/ShowProblem?problemid=d626

沒有留言:

張貼留言