Другие языки программирования и технологии

Помогите срочно решить задачу на С++

задание 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;
}



ЗЫ: если что-то не понятно, могу срочно объяснить решение за определенное вознаграждение.
Маннур Арипов
Маннур Арипов
71 721
Лучший ответ
почему в результате не
6 2 1 2 2
или не
6 2 1 2 5
Или я неверно понял задачу или кратчайший путь будет состоять из индексов минимальных элементов каждой строки.
Koл9 Tep@
Koл9 Tep@
1 140