2018年5月16日 星期三

ITSA- Arrayc 151~200-[C_AR154-易] 感染被包圍的人

題目連結:https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=24871

看不到內容請點這:
C++
https://hackmd.io/owAW7zoGTo66CZ2xG78V-A#%E6%B3%9B%E6%B4%AA%E6%BC%94%E7%AE%97%E6%B3%95%E7%AF%84%E4%BE%8B%E9%A1%8C-%E2%80%94-ITSA--Arrayc-151200-C_AR154-%E6%98%93%E6%84%9F%E6%9F%93%E8%A2%AB%E5%8C%85%E5%9C%8D%E7%9A%84%E4%BA%BA

Time Limit: 1 seconds
問題描述 :
在一個 2 維的空間中,有一群病毒(用大寫英文字母 X 表示),還有一群人類(用數字 0 表示)。若這群人則被病毒包圍了,那他們都會被感染成木頭人(用大寫的 I 表示)。

舉例而言:
Table 1 中只有 1 位人類,而且它被病毒包圍,所以這位人類會被感染,成為木頭人,其結果如 Table 3 所示。
Table 2 中也只有 1 位人類,但它沒被病毒包圍,所以不會被感染。因此結果如 Table 4 所示。
給你一個 2 維的空間,請你撰寫程式,將所有被感染的人類都換成木頭人。


輸入說明 :
輸入是一個 7 X 7 的 2 維盤面。
每一行有 7 個字母,每個字母不是 X ,或是數字 0 。每個字母用空白隔開。
輸出說明 :
將輸入盤面中被感染的人類改為大寫的 I ,並且輸出。
範例 :

輸入範例輸出範例
X X X X X X X
X X X X X X X
X X X X X X X
X X 0 X X X X
X X X X X X X
X X X X X X X
X X X X X X X
X X X X X X X
X X X X X X X
X X X X X X X
X X I X X X X
X X X X X X X
X X X X X X X
X X X X X X X

留意點:

//只要在邊綠的人,就不會被感染;
//就算是被包圍 ( 僅四方位 )  的團體,仍舊會全部感染;
//只要和邊緣的人有相連 ( 相連指的是走上、下、左、右,任一邊可以相連即可 ) 就不會被感染;

這題的寫法有兩種,僅寫出差異點


/*只要在邊緣找到一個  0,就由這個 0 開始使用 flood fill 演算法走訪下去。凡走到 0,這個 0 就可以標記為「非感染」。到最後,剩下的 0 就是會被感染的人了。*/