Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для KaraSandberg
11 / 9 / 2
Регистрация: 15.10.2019
Сообщений: 161
.NET 5

Последовательность плит, кратчайший путь

03.02.2022, 14:34. Показов 2266. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть дорожка из N плит. По ней следует пройти слева направо, начиная с крайней левой и заканчивая крайней правой. Посещение каждой плиты стоит a, (независимо от того, из какой плиты на нее прибыли). Числа n, заданные во входных данных в виде последовательности (n (1, 3, сх р в одну строчку через одинарные пробелы. Знаки а, произвольные. За один шаг можно переходить или на соседнюю плиту, или через одну (например, из 5-0й, пропустив 6-ту, сразу на Т-м), или через две (например,
с 5-й, пропустив 6-Ty Ta 7-м, сразу на 8-м) можно только вперед (слева направо, от меньших
к большим номерам плит)
Напишите программу, которая найдет путь. (последовательность плит) с минимальной суммарной стоимостью.

Добавлено через 21 минуту
Поднять тему

Добавлено через 23 минуты
Поднять тему
2
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2022, 14:34
Ответы с готовыми решениями:

Кратчайший путь
Всем привет, есть лабиринт(массив 1- проход, 0 - стена) Есть написанная не мной функция, которая ищет возможный путь, но она не...

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

Найти кратчайший путь
Всем привет, кто может, помогите: Дан двумерный массив, нужно найти кратчайший путь от левого нижнего элемента до правого верхнего...

31
1596 / 601 / 185
Регистрация: 05.12.2015
Сообщений: 970
05.02.2022, 15:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от memphis Посмотреть сообщение
Но в условии они есть.
В условии только "стоимость"
При отрицательных смысл теряется - чем больше ходишь, тем меньше сумма.
При положительных наоборот - чем меньше ходишь.
Логическая несовместимость.
Уверен, что по смыслу задачи там не должно быть отрицательных - только натуральное измерение.
0
 Аватар для memphis
740 / 284 / 83
Регистрация: 12.12.2012
Сообщений: 564
05.02.2022, 16:09
Цитата Сообщение от proa33 Посмотреть сообщение
При отрицательных смысл теряется
Да согласен, согласен. Понятие "стоимость" относится к миру денег, а там не принято оперировать отрицательными величинами. Не зря бухгалтера разделяют дебет с кредитом, а не валят всё в одну кучу.
Только что сверял результаты вашего решения и моего. Нашёл расхождение в вашу пользу. Задумался... Пожалуй поковыряю ещё своё решение. Интересно, почему так получается...

Добавлено через 6 минут
samana, так у вас рабочий вариант? Просто вы писали, что на отрицательных не смотрели. Я и подумал, что работа не закончена...
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
05.02.2022, 16:18
Цитата Сообщение от memphis Посмотреть сообщение
samana, так у вас рабочий вариант? Просто вы писали, что на отрицательных не смотрели. Я и подумал, что работа не закончена...
О возможных отрицательных элементах я узнал только после выкладывания кода. И сейчас получается так, что мой вариант "собирает" дорогу с минимальной стоимостью, но если встречаются отрицательные элементы, то обязательно по ним проходим, чтобы нам "вернули" кол-во очков. В итоге можно даже остаться "в плюсе", если все пути отрицательные, то-есть за прохождения по ним не мы платим, а платят нам.
0
 Аватар для memphis
740 / 284 / 83
Регистрация: 12.12.2012
Сообщений: 564
05.02.2022, 16:50
samana, Понятно, значит вариант тоже рабочий (как и у proa33). Тогда вам обоим плюсик в карму, а я пойду варить кофе и смотреть где у меня валится логика. ))
0
1596 / 601 / 185
Регистрация: 05.12.2015
Сообщений: 970
05.02.2022, 16:53
работает быстрее рекурсии.
Но только для положительных.
В данной задаче это взаимоисключающие условия. Невозможно здесь использовать отрицательные - решение будет абсурдным.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
     static void Main( string[] args )
        {
            int[] glass = new int[] { 1, 2, 3, 3, 2, 1, 2, 3, 3 };
            int lastindex = glass.Length - 1;
            int[] prices = new int[glass.Count()];
 
            for (int i = 0; i < glass.Length; i++)
            {
                int min = int.MaxValue;
                bool isFound = false;
                for (int x = i - 1; x >= 0 && x > i - 4; x--)
                    if (prices[x] < min)
                    {
                        min = prices[x];
                        isFound = true;
                    }
                prices[i] = glass[i] + (isFound ? min : 0);
            }
 
            List<int> bestList = new List<int>();
            int currentIndex = lastindex;
            while (true)
            {
                bestList.Add( currentIndex );
                if (currentIndex == 0)
                    break;
                int minPrice = int.MaxValue;
                int minIndex = 0;
                for (int x = currentIndex - 1; x >= 0 && x > currentIndex - 4; x--)
                {
                    if (x == 0)
                    {
                        minIndex = 0;
                        break;
                    }
                    if (prices[x] < minPrice)
                    {
                        minPrice = prices[x];
                        minIndex = x;
                    }
                }
                currentIndex = minIndex;
            }
            bestList.Reverse();
            Console.WriteLine( string.Join( " ", glass ) );           
            Console.WriteLine( string.Join( " ", bestList ) );
            Console.WriteLine( bestList.Sum( i => glass[i] ) );
 
            Console.ReadKey();
        }
2
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
05.02.2022, 17:03
proa33, как бы ни было абсурдно:
Цитата Сообщение от KaraSandberg Посмотреть сообщение
Посещение каждой плиты стоит a,
Цитата Сообщение от KaraSandberg Посмотреть сообщение
Знаки а, произвольные
1
 Аватар для memphis
740 / 284 / 83
Регистрация: 12.12.2012
Сообщений: 564
05.02.2022, 17:06
Я даже кофе не попил ещё, как понял что у меня ошибка именно в логике. Хотя казалось, что подход безупречный. )) Бывает...
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
05.02.2022, 17:13
В одном из постов в интернет, кто-то посоветовал воспринимать отрицательный путь как путь за который нам платят, а не мы платим за него. То есть если задача пройти путь с минимальной стоимостью (не путать с кратчайшим путём), то конечно выгодней пройти по самым дешёвым дорогам либо по тем за которые нам ещё и заплатят.
Но в самом задании нет конкретики там указано что и кратчайший путь, а потом и путь с минимальной стоимостью одновременно, поэтому я не знаю что в приоритете - минимальное количество ходов либо всё-таки их суммарная стоимость или всё вместе...

Добавлено через 1 минуту
memphis, мы всё-таки ждём и ваш вариант.
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
05.02.2022, 17:15
Цитата Сообщение от samana Посмотреть сообщение
о в самом задании нет конкретики
samana, есть:
Цитата Сообщение от KaraSandberg Посмотреть сообщение
Напишите программу, которая найдет путь. (последовательность плит) с минимальной суммарной стоимостью.
А про кратчайший - это только в заголовке, а там чего не пишут.
0
 Аватар для memphis
740 / 284 / 83
Регистрация: 12.12.2012
Сообщений: 564
05.02.2022, 17:39
samana, да, я когда условие читал, тоже не мог поверить, что стоимость с любым знаком. Думал просто похабно составленное задание. Здесь proa33 вполне обоснованно настаивает на бредовости. В жизни мы разделяем понятия получения прибыли и несения убытков.
Но задание есть такое, какое оно есть. Просто нужно абстрагироваться от привычных шаблонов. И chumich правильно делает, что настаивает на дословном прочтении задания.
Цитата Сообщение от samana Посмотреть сообщение
мы всё-таки ждём и ваш вариант.
Дык, как оказалось нет его. Я подумал, что задача будет решена, если избавляться от самых дорогостоящих ячеек и тогда останется искомый путь. Но вот это оказалось не так. Более дорогостоящая ячейка может внести меньший вклад в сумму, чем две более дешёвых. Такое очевидное положение, тем не менее ускользнуло из внимания в начале. Ещё подумаю, можно ли "выкрутиться" в рамках обозначенного подхода. Но сомневаюсь. ))
1
1596 / 601 / 185
Регистрация: 05.12.2015
Сообщений: 970
05.02.2022, 18:11
Лучший ответ Сообщение было отмечено chumich как решение

Решение

Универсальный для обоих случаев.
Зависит не от алгоритма, а от условия задачи:
если есть отрицательные - поиск любого пути с минимальной стоимости
если только положительные - поиск кратчайшего пути с минимальной стоимостью
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
      static void Main( string[] args )
        {
            int[] glass = new int[] { 1, 2, 3, 3, 2, 1, 2, 3, 3 };
            int lastindex = glass.Length - 1;
            int[] prices = new int[glass.Count()];
 
            for (int i = 0; i < glass.Length; i++)// подсчет минимальной стоимости захода в каждую клетку
            {
                int min = int.MaxValue;
                bool isFound = false;
                for (int x = i - 1; x >= 0 && x > i - 4; x--)
                    if (prices[x] < min)
                    {
                        min = prices[x];
                        isFound = true;
                    }
                prices[i] = glass[i] + (isFound ? min : 0);
            }
 
            List<int> bestList = new List<int>();
            int currentIndex = lastindex;
            while (true) // поиск с конца клетки с минимальной стоимостью
            {
                bestList.Add( currentIndex );
                if (currentIndex == 0)
                    break;
                int minPrice = int.MaxValue;
                int minIndex = 0;
                for (int x = currentIndex - 1; x >= 0 && x > currentIndex - 4; x--)
                    if (prices[x] < minPrice)
                    {
                        minPrice = prices[x];
                        minIndex = x;
                    }
                currentIndex = minIndex;
            }
            bestList.Reverse();
            Console.WriteLine( string.Join( " ", glass ) );
            Console.WriteLine( string.Join( " ", bestList ) );
            Console.WriteLine( bestList.Sum( i => glass[i] ) );
 
            Console.ReadKey();
        }
2
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
05.02.2022, 18:33
proa33, насколько смог - проверил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.02.2022, 18:33

Программа определяющая кратчайший путь
Разработать программу определяющая кратчайший путь с#

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

Кратчайший путь в графе: ошибка в программе
Подскажите, пожалуйста, что не так? Программная реализация алгоритма Форда-Беллмана, поиск кратчайшего пути в графе using System; ...

Кратчайший путь с дополнительным временем преодоления перекрестка
Всем привет :cry: Недавно наткнулся на такую вот задачу. Пробывал решать Дейкстером не получилось.Опытные люди,помогите пожалуйста с...

Найти кратчайший путь в двухмерном массиве (FormAplication)
мне нужно найти кротчайший путь в двухмерном массиве,и надо написать эту программу при помощи FormAplication,как тут можно разделить окно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru