Ну, собственно, говоря, нолики - это вершины графа. Если два нолика рядом по горизонтали или диагонали, то вершины графа смежные. Ну и вперед, работать с графом. Вопрос вот в чем: в данном случае длина каждого ребра графа будет равна единице. То есть, по большому счету, алгоритм Дейкстры будет тем самым волновым поиском, от которого вы отказываетесь.
Я бы не стал заморачиваться с созданием графа при помощи указателей и реализовал программу так:
1. Создаем массив X того же размера из целых чисел. В нем будем отмечать длины пути.
2. Создаем динамический массив M, в котором будем хранить текущее положение (можно обойтись без массива - тут на любителя) .
2. Стартуем из нужной точки, в X в эту точку пишем 0, добавляем координаты этой точки в M.
3. Для каждой точки T из массива M проверяем наличие проходов в 4 стороны по лабиринту. Для каждого существующего прохода записываем в массив X в эту точку значение из точки T плюс один, добавляем эту точку в массив M, а T оттуда, соответственно, удаляем.
4. После n-той итерации пункта 3 в массиве M у нас будут точки, удаленный от изначальной на расстояние n, т. е. , фактически, нами реализован волновой поиск.
5. Проверяем наличие конечной точки среди массива M. Если она там есть, то длина кратчайшего пути - это значение массива X в этой точке. При этом поиск можно прекращать (здесь идет важное отличие от классического алгоритма Дейкстры, т. к. у нас длины всех ребер равны единице и никогда путь с большим кол-вом ребер не будет короче пути с меньшим кол-вом) .
6. Если в определенный момент массим М пустой, значит, такого пути вообще нет.
7. Если еще нет конечной точки в массиве М, то возвращаемся к пункту 3.
Вроде, все.
Другие языки программирования и технологии
Подскажите пожалуйста. Может есть действительно сильные программеры. Вобщем дан 2-мерный массив.
А скажите, зачем вам это ???
И дальше что? Что делать то с массивом ентим?
P.S. Комменты не читаю.
P.S. Комменты не читаю.
"10000*10000"?
Тот же волновой метод, но задаёшь шаблон минимального кол-ва нулей как 10000 - т. е. прямая на выход из лабиринта. И параметр волны первый заход 10000, не вышел, второй заход 10001, третий заход 10002 и т. д. в 4-5 приёмов выскочит.
Тот же волновой метод, но задаёшь шаблон минимального кол-ва нулей как 10000 - т. е. прямая на выход из лабиринта. И параметр волны первый заход 10000, не вышел, второй заход 10001, третий заход 10002 и т. д. в 4-5 приёмов выскочит.
не сильный я прогер. Но могу придумать какую нить херь с ходу даже.... не зря же Самитову сдавал.
тока знаю я Паскаль-- Делфи.... Могу немного подсказать со строением проги если надо.... делать все равно не фиг....
тока знаю я Паскаль-- Делфи.... Могу немного подсказать со строением проги если надо.... делать все равно не фиг....
И что?
Похожие вопросы
- Сортировка 2-мерного массива в С++
- С++.Дан одномерный числовой массив. Написать функции.
- C# Дан массив размера N. Найти 2 элемента массива, сумма которых наиболее близка к максимуму массива и поменять
- Дан целочисленный двумерный массив, размерности n х m. Заменить все отрицательные числа нулем
- Дан одномерный целочисленный массив a, состоящий из n элементов.
- Дан прямоугольный целочисленный массив размером N*N. Определить является ли данный массив магическим квадратом, т.е. сум
- Дан двумерный динамический массив, надо составить программу, которая меняет местами две любые строки
- JS-программеры! подскажите пожалуйста код для перемещения объекта курсором мыши.
- Подскажите пожалуйста, программирование в 1С. Нужно сгенерировать массив....
- Как отсортировать по возростанию 2-й массив в С# ?