繁体   English   中英

如何测试 size_t -1 是否未定义,其中 size_t 为 0?

[英]How to test if size_t -1 is not undefined, where size_t is 0?

这个问题涉及在邻接矩阵上操作的深度优先搜索的边缘。
给定一个邻接矩阵:

{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 (其中 row 的类型为size_t )时, row -1未定义,并且(row -1 > 0)在我的编译器上计算为true

如何使用size_t测试row -1是否仍在我的邻接矩阵的边界内?

这是简单的数学运算: row - 1 > 0 <=> row > 1column - 1 > 0 <=> column > 1 你可以更换

if(row-1 >= 0 && sky.at(row-1).at(column) == 1)

if(row >= 1 && sky.at(row-1).at(column) == 1)

if(column-1 >= 0 && sky.at(row).at(column-1) == 1)

if(column >= 1 && sky.at(row).at(column-1) == 1)

您还应该考虑更换

if(row+1 <= sky.size()-1 && sky.at(row+1).at(column) == 1)

if(sky.size() >= 2 && row <= sky.size()-2 && sky.at(row+1).at(column) == 1)

if(column+1 <= sky.at(0).size()-1 && sky.at(row).at(column+1) == 1)

if(sky.at(row).size() >= 2 && column <= sky.at(row).size()-2 && sky.at(row).at(column+1) == 1)

避免各种环绕。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM