Задача на матрицу и кратчайший путь.

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
H[o][o]K
Сообщения: 1
Зарегистрирован: 16 дек 2007, 05:31

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

"Движение плота"
Квадратное озеро, покрытое многочисленными островами, задаётся матрицей, размером NxN. Каждый элемент матрицы - либо символ '#' - решётка, обозначающий остров, либо '0' - ноль, обозначающий участок воды. В верхнем левом углу озера находится квадратный плот размером MхM клеток(попросили сделать 1х1 клетку). За один шаг плот может перемещаться на одну клетку по горизонтали или вертикали.
Составить алгоритм-программу для определения минимального числа шагов, за которое плот может достигнуть правого нижнего угла озера. Входной файл исходных данных содержит числа N и M. В следующих N строках располагается матрица, представляющая озеро. Выходной файл должен содержать единственное число - количество необходимых шагов. Если правого нижнего угла достичь невозможно, то выходной файл должен содеражть число -1(минус один).
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

А... маршрутизация графа.
Короче, создается матрица NxN. Потом во все клетки, соседние с клеткой начала, записывается единица. Потом во все клетки, соседние с единицами записывается двойка, и т.д. (цифра в клетке показывает, за сколько шагов можно дойти до этой клетки). Если одна и та же незаполненная клетка находится рядом с двумя заполненными - она заполняется как меньшее значение из них +1. Например, если клетка находится рядом с 3 и 8, в нее записывается 4 (это 3+1).
Потом, если не осталось клеток рядом с заполненными, а клетка, до которой надо добраться, не заполнена - пути нет. В противном случае в искомой клетке будет ответ.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить