задание 1
Научный Робот для спуска в жерло вулкана. При спуске с одного уровня на низкий он тратит определенное количество топлива. Чем сложнее переход - тем больше топлива он расходует. Написать программу для выбора оптимального пути.
Входной файл содержит количество уровней и количество топлива, которое будет потрачено, двигаясь тем или иным путем. В файл с результатом нужно вывести количество топлива, которое затратит робот и путь.
Схематично спуск можно представить следующим образом.
Robot.in
4
21
3 6 5
4 1 4 10
2 1 3 2 1
Robot.out
7 1 1 2 2
Другие языки программирования и технологии
Помогите срочно решить задачу на С++
> кратчайший путь будет состоять из индексов минимальных элементов каждой строки
Нет!
> почему в результате не
> 6 2 1 2 2
С точки верхнего уровня можно пойти на нижнюю правую или на нижнюю левую точку.
2 1
3 6 5
4 1 4 10
2 1 3 2 1
Простора оптимизации данного решения хоть отбавляй, корректность входных данных не проверяется:
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
int minfuel = -1;
string minpath;
int numlevels;
vector< vector < int > > vv;
void searchmfp(int level, int point, string path, int fuel) {
fuel += vv[level][point - 1];
if ( level == numlevels ) {
if (minfuel == -1 || minfuel > fuel) {
minfuel = fuel;
minpath = path;
}
} else {
ostringstream oss;
oss << path << ' ' << point;
searchmfp(level + 1, point, oss.str(), fuel);
oss.str(string());
oss << path << ' ' << point + 1;
searchmfp(level + 1, point + 1, oss.str(), fuel);
}
}
int main() {
ifstream in("robot.in");
vv.push_back(vector< int >());
vv[0].push_back(0);
in >> numlevels;
for (int r = 1; r <= numlevels; ++r) {
vv.push_back(vector< int >());
for (int c = 0; c <= r; ++c) {
int fv;
in >> fv;
vv[r].push_back(fv);
}
}
searchmfp(0, 1, string(), 0);
ofstream out("robot.out");
out << minfuel << minpath;
return 0;
}
ЗЫ: если что-то не понятно, могу срочно объяснить решение за определенное вознаграждение.
Нет!
> почему в результате не
> 6 2 1 2 2
С точки верхнего уровня можно пойти на нижнюю правую или на нижнюю левую точку.
2 1
3 6 5
4 1 4 10
2 1 3 2 1
Простора оптимизации данного решения хоть отбавляй, корректность входных данных не проверяется:
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
int minfuel = -1;
string minpath;
int numlevels;
vector< vector < int > > vv;
void searchmfp(int level, int point, string path, int fuel) {
fuel += vv[level][point - 1];
if ( level == numlevels ) {
if (minfuel == -1 || minfuel > fuel) {
minfuel = fuel;
minpath = path;
}
} else {
ostringstream oss;
oss << path << ' ' << point;
searchmfp(level + 1, point, oss.str(), fuel);
oss.str(string());
oss << path << ' ' << point + 1;
searchmfp(level + 1, point + 1, oss.str(), fuel);
}
}
int main() {
ifstream in("robot.in");
vv.push_back(vector< int >());
vv[0].push_back(0);
in >> numlevels;
for (int r = 1; r <= numlevels; ++r) {
vv.push_back(vector< int >());
for (int c = 0; c <= r; ++c) {
int fv;
in >> fv;
vv[r].push_back(fv);
}
}
searchmfp(0, 1, string(), 0);
ofstream out("robot.out");
out << minfuel << minpath;
return 0;
}

ЗЫ: если что-то не понятно, могу срочно объяснить решение за определенное вознаграждение.
почему в результате не
6 2 1 2 2
или не
6 2 1 2 5
Или я неверно понял задачу или кратчайший путь будет состоять из индексов минимальных элементов каждой строки.
6 2 1 2 2
или не
6 2 1 2 5
Или я неверно понял задачу или кратчайший путь будет состоять из индексов минимальных элементов каждой строки.
Похожие вопросы
- помогите решить срочно решить задачу в абс не получаеться а надо
- помогите пожалуйста решить задачу по работе компьютера!
- Помогите пожалуйста решить задачи по информатике, одномерные массивы. Си шарп. Очень срочно. Пожалуйста!!!!
- Помогите пожалуйста решить задачу по С++!!Срочно..
- Помогите пожалуйста решить задачу, срочно)
- Помогите,пожалуйста,решить задачу в Паскале.
- Помогите пожалуйста решить задачу по программированию. В чем я ошибаюсь?
- Pascal. Помогите пожалуйста решить задачу в паскале !
- Помогите плз решить задачу в Delphi.
- Помогите пожалуйста решить задачи по программированию. P.S: задачи по паскалю.