Определить количество областей, заполненных числами «1» и размер наибольшей области в матрице - C#

Узнай цену своей работы

Формулировка задачи:

Дано клеточное поле размера 10x10, заполненное числами «0» и «1». Определить количество областей, заполненных числами «1» и размер наибольшей области. Единицы входят в одну область, если являются соседями по вертикали или горизонтали. Если областей из «1» нет, то вывести соответствующее сообщение. Форма ввода: с клавиатуры вводится матрица размера 10x10, заполненная числами «0» и «1». Форма вывода: количество областей, размер наибольшей области

Решение задачи: «Определить количество областей, заполненных числами «1» и размер наибольшей области в матрице»

textual
Листинг программы
using System;
 
static class Program
{
    static bool[,] map;
 
    static void Main()
    {
        int size = 5, maxAreaLength = 0, count = 0;
        int[,] arr = RandomBinaryArray(size);
        map = new bool[size, size];
        PrintArray(arr);
        for (int i = 0; i < arr.GetLength(0); i++)
            for (int j = 0; j < arr.GetLength(1); j++)
                if (!map[i, j] && arr[i,j] != 0)
                {
                    int tmp = ExploreArea(arr, i, j);
                    if (tmp > 0) count++;
                    if (maxAreaLength < tmp) maxAreaLength = tmp;
                }
        Console.WriteLine("Count: {0}, Max: {1}", count, maxAreaLength);
    }
 
    public static int ExploreArea(int[,] array, int row, int col)
    {
        if (array[row, col] == 0 || map[row, col])
            return 0;
        else
        {
            map[row, col] = true;
            int left, right, top, bottom;
            left = right = top = bottom = 0;
            if (row > 0)
                top = ExploreArea(array, row - 1, col);
            if (col > 0)
                left = ExploreArea(array, row, col - 1);
            if (row + 1 < array.GetLength(0))
                bottom = ExploreArea(array, row + 1, col);
            if (col + 1 < array.GetLength(1))
                right = ExploreArea(array, row, col + 1);
            return 1 + left + right + top + bottom;
        }
    }
 
    public static int[,] RandomBinaryArray(int size)
    {
        int[,] array = new int[size, size];
        Random r = new Random();
        for (int i = 0; i < size; i++)
            for (int j = 0; j < size; j++)
                array[i, j] = r.Next(2);
        return array;
    }
 
    public static void PrintArray(int[,] array)
    {
        for (int i = 0; i < array.GetLength(0); i++)
        {
            for (int j = 0; j < array.GetLength(1); j++)
                Console.Write(array[i, j] + " ");
            Console.WriteLine();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы