Возможно, стоит явно объявить конструктор по умолчанию у структуры Labirinth, где, в списках инициализации, задать размер вектору, при этом заполнив его нулями.
[ ] Операции над лабиринтом лучше вынести в отдельный файл.
[ ] int colum = 0 Наверное, всё-таки column
[ ] Для хранения магических -1, -2, -3... лучше использовать константы
Например, WALL
Так же, стоит подумать об использовании константы вида std::map для хранения пар, где ключом будет являться число типа int, а значением char.
Например:
Тогда, описанное выше ветвление можно будет заменить чем-то вроде этого:
auto exampleResult = exampleMap.find(3);
if (exampleResult == exampleMap.end())
{
outputFile << ' ';
}
else
{
outputFile << exampleResult->second;
}
[ ] Для проверки инициализации переменной можно использовать boost::optional. Это позволит избавиться от велосипеда
case 'A':
labirinth.map[row][colum] = 1;
labirinth.startPoint = { row, colum };
if (!haveStart)
{
haveStart = true;
}
else
{
outputFile << "We found more than one starting points!\n";
wasError = true;
}
break;
И превратит кусок кода, расположенный чуть выше, во что-то вроде:
case 'A':
if (labirinth.startPoint.is_initialized())
{
outputFile << "We found more than one starting points!\n";
wasError = true;
}
labirinth.map[row][colum] = 1;
labirinth.startPoint = { row, colum };
break;
где labirinth.startPoint имеет тип boost::optional<Point>
[ ] No path between points A and B! в выходном файле в том случае, если путь не найден.
При отсутствии пути между точками A и B необходимо вывести лабиринт без указания пути.
std::vector<std::vector<int>>
. Так же, при использовании вектора, исчезнет необходимость в методеибо его можно будет заменить.
Возможно, стоит явно объявить конструктор по умолчанию у структуры
Labirinth
, где, в списках инициализации, задать размер вектору, при этом заполнив его нулями.int colum = 0
Наверное, всё-такиcolumn
Например,
WALL
Так же, стоит подумать об использовании константы вида std::map для хранения пар, где ключом будет являться число типаint
, а значением char. Например:Тогда, описанное выше ветвление можно будет заменить чем-то вроде этого:
boost::optional
. Это позволит избавиться от велосипедаИ превратит кусок кода, расположенный чуть выше, во что-то вроде:
где
labirinth.startPoint
имеет типboost::optional<Point>
No path between points A and B!
в выходном файле в том случае, если путь не найден.При отсутствии пути между точками A и B необходимо вывести лабиринт без указания пути.
Пока k = 0.9