С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
5 / 6 / 2
Регистрация: 14.03.2015
Сообщений: 106

В матрице найти такой путь от первой колонки к последней, чтобы сумма чисел пройденных по пути была минимальная

06.01.2019, 14:38. Показов 1163. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, нужен алгоритм. Формируется двумерная таблица из случайных цифр 1-9. Нужно найти такой путь от первой колонки таблицы к последней, чтобы сумма чисел пройденных по пути была минимальная. Двигаться можно прямо , вбок и по-диагонали. Юзер вводит размеры таблицы. Результат программы строка чисел через которые проходит путь и их сумма.

Пример работы:

Название: пример.JPG
Просмотров: 41

Размер: 9.9 Кб

Результат: Путь (3,1,5,1,7) Сумма 18
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.01.2019, 14:38
Ответы с готовыми решениями:

Найти такой путь из клетки [i1, j1] в клетку [i2, j2], чтобы сумма чисел по данному пути была минимальной
Здравствуйте, есть такая задача: 1.Дан двумерный числовой массив размером N1xN2. 2.Найти такой путь из клетки в клетку , чтобы...

Найти такой набор целых положительных чисел, чтобы их сумма была равна N
Доброго времени, форумчане! Весь вечер ломаю голову, на ум ничего не приходит. Задание. Написать программу,которая находит такой набор...

Найти такой путь из клетки (1,1) в клетку (А, В), чтобы сумма чисел равнялась заданному числу К
Помогите написать программу к задаче Дано шахматную доску размером М на N. Шахматная фигура "мини-тура" может перемещаться...

11
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
06.01.2019, 16:55
Цитата Сообщение от Akellorio Посмотреть сообщение
Ребят, нужен алгоритм
Можно просто перебрать все пути и выбрать минимальный. По времени это не очень эффективно будет:

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cfenv>
#include <cinttypes>
#include <cstdint>
#include <cwchar>
#include <cwctype>
 
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
 
using namespace std;
 
#define int long long int 
 
void get_min(const vector<vector<int>>& a, int n, int i, int j, int cur, int& ans) {
  if (i >= n || j >= n || i < 0 || j < 0)
    return;
 
  if (j == n - 1) {
    ans = min(ans, cur + a[i][j]);
 
    return;
  }
 
  get_min(a, n, i, j + 1, cur + a[i][j], ans);
  get_min(a, n, i + 1, j, cur + a[i][j], ans);
  get_min(a, n, i + 1, j + 1, cur + a[i][j], ans);
}
 
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout.precision(9);
 
  int n;
  int m;
  cin >> n >> m;
 
  vector<vector<int>> a(n, vector<int>(m));
 
  random_device rd;
  mt19937 eng(rd());
  uniform_int_distribution<int> dist(1, 9);
 
  for (auto& i : a) {
    for (auto& j : i)
      j = dist(eng);
  }
 
  for (const auto& i : a) {
    copy(i.cbegin(), i.cend(), ostream_iterator<int>(cout, " "));
 
    cout << '\n';
  }
 
  int ans = numeric_limits<int>::max();
 
  for (int i = 0; i < n; ++i)
    get_min(a, n, i, 0, 0, ans);
 
  cout << ans;
}
0
5 / 6 / 2
Регистрация: 14.03.2015
Сообщений: 106
06.01.2019, 17:37  [ТС]
Очень сложно... Это должен быть небольшой проект по плюсам для первокурсника. Меня одно только количество подключённых библиотек повергло в ужас.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
06.01.2019, 19:08
Цитата Сообщение от Akellorio Посмотреть сообщение
Меня одно только количество подключённых библиотек повергло в ужас
И меня.


P.S. Оставьте vector, algorithm, iostream, limits, random, iterator, больше, вроде, ничего не надо.
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
06.01.2019, 19:42
Цитата Сообщение от Akellorio Посмотреть сообщение
Меня одно только количество подключённых библиотек повергло в ужас.

Не по теме:

это шаблон для олимпиадного программирования, лень было думать что нужно а что нет поэтому отсавил как есть

0
5 / 6 / 2
Регистрация: 14.03.2015
Сообщений: 106
06.01.2019, 20:49  [ТС]
Ребят, нужно простое решение проблемы, стандартными средствами языка , без десятков библиотек и сторонних функций. Сорян что такой придирчивый , но мне просто это всё ещё придётся объяснять...
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
06.01.2019, 21:10
Цитата Сообщение от Akellorio Посмотреть сообщение
Ребят, нужно простое решение проблемы, стандартными средствами языка , без десятков библиотек и сторонних функций. Сорян что такой придирчивый , но мне просто это всё ещё придётся объяснять...
оч сложное решение особенно из-за инклюдов да я ведь его не объяснил и код такой сложный да особенно создание двумерного вектора и прочее ага
какие-то нестандартные средства языка по типу векторов и рандома ага

>перебрать все пути
>оч сложное решение

короче, решение никому не нужно. Нужно как-то решить так чтобы автор понял а если не понял значит решение сложное и ты задачу не решил и вообще поэтому иди лесом ведь ему еще это объяснять

Кому-то дают задачу чтобы подкачаться а он даже списывая не хочет ничего понимать

Вот решение: перебор всех путей или дп. Решайте, удачи.
0
Эксперт .NET
 Аватар для Usaga
14113 / 9330 / 1350
Регистрация: 21.01.2016
Сообщений: 35,055
07.01.2019, 09:49
Akellorio, так вам и предложили решение средствами самого языка, без единой сторонней библиотеки.
0
11 / 14 / 12
Регистрация: 20.03.2017
Сообщений: 182
07.01.2019, 10:09
Почему у меня не работает предложенное решение? Ввожу размер и программа завершается, или это не полное?
0
Эксперт .NET
 Аватар для Usaga
14113 / 9330 / 1350
Регистрация: 21.01.2016
Сообщений: 35,055
07.01.2019, 10:43
Button123, воспользуйтесь отладчиком, чтобы понять что происходит.
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
07.01.2019, 13:59
Цитата Сообщение от Button123 Посмотреть сообщение
Почему у меня не работает предложенное решение? Ввожу размер и программа завершается, или это не полное?
в коде ошибки, вот исправленный (соре не досмотрел):

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
51
52
53
54
55
56
57
#include <iostream>
#include <iterator>
#include <random>
 
using namespace std;
 
#define int long long int 
 
void get_min(const vector<vector<int>>& a, int n, int m, int i, int j, int cur, int& ans) {
  if (i >= n || j >= m || i < 0 || j < 0)
    return;
 
  if (j == m - 1) {
    ans = min(ans, cur + a[i][j]);
 
    return;
  }
 
  get_min(a, n, m, i, j + 1, cur + a[i][j], ans);
  get_min(a, n, m, i + 1, j, cur + a[i][j], ans);
  get_min(a, n, m, i + 1, j + 1, cur + a[i][j], ans);
}
 
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout.precision(9);
 
  int n;
  int m;
  cin >> n >> m;
 
  vector<vector<int>> a(n, vector<int>(m));
 
  random_device rd;
  mt19937 eng(rd());
  uniform_int_distribution<int> dist(1, 9);
 
  for (auto& i : a) {
    for (auto& j : i)
      j = dist(eng);
  }
 
  for (const auto& i : a) {
    copy(i.cbegin(), i.cend(), ostream_iterator<int>(cout, " "));
 
    cout << '\n';
  }
 
  int ans = numeric_limits<int>::max();
 
  for (int i = 0; i < n; ++i)
    get_min(a, n, m, i, 0, 0, ans);
 
  cout << ans;
}
0
11 / 14 / 12
Регистрация: 20.03.2017
Сообщений: 182
07.01.2019, 17:44
Все теперь верно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2019, 17:44
Помогаю со студенческими работами здесь

В дереве найти такой пусть, чтобы сумма узлов была равна заданному числу
Задача: В дереве найти такой пусть, чтобы сумма узлов была равна 50. В целом, понятно. У меня вышло найти тот узел, в котором эта...

Найти последовательность из трех чисел, чтобы их сумма была равна 10
Нужна помощь!!! Задание такое: Из текстового файла считать матрицу любой размерности. НАДО (ПО СТРОКАМ) найти последовательность из трех...

Ввести пароль,чтобы сумма первой и последней цифры =8
Алгоритм проверки корректности пароля сумма первой и последней цифры =8. проблема именно в задании алгоритма. помогите,пожалуйста

Даны 6 чисел Найти среди них такие два числа, чтобы их сумма была равна 8
только начинаю изучение питона помогите с задачами, пожалуйста 5) Даны 6 чисел. Найти среди них такие два числа, чтобы их сумма была...

Исключить из данного списка такой элемент, чтобы сумма элементов, которые остались, была равна 10
Здравствуйте, не дружу с Лиспом, нужна помощь в решении задачи. Задание: Исключить из данного списка такой элемент, чтобы сумма...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru