0036-紅與黑

問(wèn)題描述

有一間長(zhǎng)方形的房子,地上鋪了紅色、黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動(dòng)。請(qǐng)寫一個(gè)程序,計(jì)算你總共能夠到達(dá)多少塊黑色的瓷磚。

輸入

包括多個(gè)數(shù)據(jù)集合。每個(gè)數(shù)據(jù)集合的第一行是兩個(gè)整數(shù)W和H,分別表示x方向和y方向瓷磚的數(shù)量。W和H都不超過(guò)20。在接下來(lái)的H行中,每行包括W個(gè)字。每個(gè)字符表示一塊瓷磚的顏色,規(guī)則如下

  1. ‘.’:黑色的瓷磚;
  2. ‘#’:白色的瓷磚;
  3. ‘@’:黑色的瓷磚,并且你站在這塊瓷磚上。該字符在每個(gè)數(shù)據(jù)集合中唯一出現(xiàn)一次。

當(dāng)在一行中讀入的是兩個(gè)零時(shí),表示輸入結(jié)束。

輸出

對(duì)每個(gè)數(shù)據(jù)集合,分別輸出一行,顯示你從初始位置出發(fā)能到達(dá)的瓷磚數(shù)(記數(shù)時(shí)包括初始位置的瓷磚)。

輸入樣列

6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
0 0

輸出樣例

45

算法實(shí)現(xiàn)

using System;

namespace Questions{
    class Program{
        public static void Main(string[] args){
            while (true)
            {
                string input = Console.ReadLine();
                string[] data = input.Split(' ');
                int m = int.Parse(data[0]);
                int n = int.Parse(data[1]);
                if (m == 0 || n == 0)
                    break;

                char[,] res = new char[n, m];
                int indexM = 0, indexN = 0;
                for (int i = 0; i < n; i++)
                {
                    input = Console.ReadLine();
                    for (int j = 0; j < m; j++)
                    {
                        res[i, j] = input[j];
                        if (input[j] == '@')
                        {
                            indexM = j; indexN = i;
                        }
                    }
                }
                Result(ref res, indexM, indexN);
                int sum = 1;
                foreach (char item in res)
                {
                    if (item == '0')
                        sum++;
                }
                Console.WriteLine(sum);
            }
            Console.ReadKey();
        }

        public static void Result(ref char[,] result, int m, int n)
        {
            if (m - 1 >= 0)
            {
                if (result[n, m - 1] == 46)
                {
                    result[n, m - 1] = '0';
                    Result(ref result, m - 1, n);
                }
            }
            if (n - 1 >= 0)
            {
                if (result[n - 1, m] == 46)
                {
                    result[n - 1, m] = '0';
                    Result(ref result, m, n - 1);
                }
            }
            if (m + 1 < result.GetLength(1))
            {
                if (result[n, m + 1] == 46)
                {
                    result[n, m + 1] = '0';
                    Result(ref result, m + 1, n);
                }
            }
            if (n + 1 < result.GetLength(0))
            {
                if (result[n + 1, m] == 46)
                {
                    result[n + 1, m] = '0';
                    Result(ref result, m, n + 1);
                }
            }
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容