Алгоритм Флойда реализован с помощью (const vector <int>& t: flight), какие значения хранятся в 't' - PullRequest
0 голосов
/ 13 ноября 2018

Я сталкивался с этой реализацией floyd, но у меня есть вопрос относительно того, что 't' хранит в качестве значений, так как полеты - это вектор векторов.(Я понимаю, как работает алгоритм.)

//vector<vector<int>>& flights
//vector<vector<int>> vec(n, vector<int>(k + 1));

for (int i = 1; i <= k; i++)
{
    for (int j = 0; j < n; j++)
    {
        vec[j][i] = vec[j][i - 1];

        for (const vector<int>& t : flights)
        {
            vec[t[1]][i] = min(vec[t[1]][i], vec[t[0]][i - 1] + t[2]);
        }
    }
}

1 Ответ

0 голосов
/ 13 ноября 2018

Этот синтаксис представляет собой цикл на основе диапазона, введенный в C ++ 11. Здесь t - это просто постоянная ссылка на элемент flights. Цикл будет посещать каждый элемент flights по порядку, и вы можете использовать идентификатор t для ссылки на текущий элемент.

Цикл примерно эквивалентен следующему синтаксису до C ++ 11:

for(std::vector<std::vector<int>>::const_iterator it = flights.begin(); it != flights.end(); ++it)
{
    const vector<int>& t = *it;
    vec[t[1]][i] = min(vec[t[1]][i], vec[t[0]][i - 1] + t[2]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...