Этот вопрос касается границ поиска в глубину, работающего на матрице смежности. Учитывая матрицу смежности:
{1,0,0,1},
{1,1,0,0},
{0,0,0,1},
{1,1,1,1}
У меня есть отлично работающая DFS, например:
typedef std::vector<std::vector<short>> matrix;
void myClass::dfs(short row, short column, std::shared_ptr<matrix> m_visited, const matrix &sky) {
if (m_visited->at(row).at(column) == 1) {
return;
}
m_visited->at(row).at(column) = 1; //Mark the node as visited
if(row+1 <= sky.size()-1 && sky.at(row+1).at(column) == 1) { //Look horizontally forward
dfs(row+1, column, m_visited, sky);
}
if(row-1 >= 0 && sky.at(row-1).at(column) == 1) { //Look horizontally backward
dfs(row-1, column, m_visited, sky);
}
if(column+1 <= sky.at(0).size()-1 && sky.at(row).at(column+1) == 1) { //Look vertically down
dfs(row, column+1, m_visited, sky);
}
if(column-1 >= 0 && sky.at(row).at(column-1) == 1) { //Look vertically up
dfs(row, column-1, m_visited, sky);
}
}
Теперь мне дали явную задачу заменить std::vector<std::vector<short>> matrix
с участием std::unordered_set<std::vector<size_t>> matrix
Моя проблема: size_t
не имеет знака, поэтому, например, когда row = 0
(где строка имеет тип size_t
), row -1
не определено, а (row -1 > 0)
оценивается как true в моем компиляторе.
Как я могу проверить, находится ли row -1
все еще в границах моей матрицы смежности, используя size_t
?