Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2014, 13:18   #1
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию Максимальный путь,Лабиринт.

В индийском храме пол прямоугольной формы выложен одинаковыми квадратными плитками 1х1, на каждую из которых высыпано от 0 до k зернышек (k ≤ 30000). Размеры пола mхn. Мышка выбегает из левого нижнего угла пола храма и двигается к входу в другую норку, расположенную в противоположном углу. Мышка может двигаться только вправо или вперед, собирая все зернышки с плитки, на которой она находится.

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


Код:
public static int path(int i,int j){

	//	if ((i==-1) || (j==17)) return 0; вне лабиринта....
		
		//System.out.println(a[i,j]);
		return Math.max(a[i][j]+path(i-1,j),a[i][j]+path(i,j+1));
	}

Ребята,помогите с алгоритмом пожалуйста.кроме самого маршрута хочется максимальный путь найти)но выше размера матрицы 15*15 например (пока учитываю только квадратную..) уже понятно ,что долго работать будет)а отсечь пути ещё на задаче минимального пути я мог бы, пусть и не такой рекурсией.но что делать в этом случае?)можете подсказать?
Тамерлан Абилов вне форума Ответить с цитированием
Старый 17.12.2014, 13:25   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Мышка может двигаться только вправо или вперед
вперед нужно понимать вверх?

Тогда не понял насчет минимального и максимального пути. При данных условия длина любого маршрута = m+n-1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 17.12.2014 в 13:32.
Аватар вне форума Ответить с цитированием
Старый 17.12.2014, 13:34   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

*delete 10 letters*
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 17.12.2014, 13:52   #4
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

Да я реализовал точно так же как написано левый нижний угол)вперед это вверх)
запускаю path(maxİ-1,0)...
Тамерлан Абилов вне форума Ответить с цитированием
Старый 17.12.2014, 13:52   #5
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

Код:
	for (int i=0;i<17;i++){    //массив 17*17..
				System.out.println();
				for (int j=0;j<17;j++) {
				a[i][j]=rn.nextInt(10); //rn-Random.
				System.out.print(" "+a[i][j]);
				}
			 }
			
                   System.out.println("sum="+path(16,0));

Последний раз редактировалось Тамерлан Абилов; 17.12.2014 в 14:02.
Тамерлан Абилов вне форума Ответить с цитированием
Старый 17.12.2014, 13:53   #6
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

BDA,всмысле?)
Тамерлан Абилов вне форума Ответить с цитированием
Старый 17.12.2014, 14:27   #7
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

Решить в виде задачи в графе можно(без рекурсии). структура есть.но динамически как можно это сделать?Ибо классификация такая.
Информация о задаче
Лимит времени: 1 секунда
Лимит памяти: 64 MB
Баллы за пройденный тест: 8.33333
Сложность: 39% 360/590
Автор: Анатолий Присяжнюк
Классификация: Динамическое программирование
Тамерлан Абилов вне форума Ответить с цитированием
Старый 17.12.2014, 14:38   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Тамерлан Абилов, это классическая задача на динамическое программирование. Возьмите ЛЮБОЙ учебник по ДП и там обязательно будет разбор этой задачи.

Задача эта и на форуме неоднократно решалась.
например,
http://www.programmersforum.ru/showthread.php?t=70592 (особенно пост #6)

http://www.programmersforum.ru/showthread.php?t=82696

http://www.programmersforum.ru/showthread.php?t=65954
http://programmersforum.ru/showthread.php?t=60512
http://www.programmersforum.ru/showthread.php?t=60880


да и суть решения в том, что заводим двухмерный массив и в него прописываем значения от обратного - т.е. двигаясь от финиша к началу, в каждую клетку записываем максимальное значение, которое может быть получено в данной клетке..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.12.2014, 15:30   #9
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

Сергей,спасибо большое)
Тамерлан Абилов вне форума Ответить с цитированием
Старый 17.12.2014, 15:36   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Не за что!
Успехов в решении!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Абсолютный путь. Относительный путь. Запутался. Mr_freeman Общие вопросы Web 11 22.03.2013 16:04
Лабиринт Тезея найти кратчайший путь возвращения Izobara Помощь студентам 18 27.12.2012 16:25
Лабиринт keng Помощь студентам 9 14.09.2011 06:34
Графы - Найти максимальный путь (С++) Multifruit Помощь студентам 0 06.04.2011 19:53