while (!potential_tracks.empty()) { int current_track = potential_tracksv[potential_tracksv.size() - 1]; potential_tracksv.pop_back(); // std::cout<<"current_track "<<current_track<<std::endl; potential_tracks.erase(current_track); for (int j = 0; j < cost_matrix.rows; ++j) { if (cost_matrix.at<int>(j, current_track) == 1) { // std::cout<<"visited_detections#### "<<j<<std::endl; setupdate(visited_detections, j); } } visited_tracks.insert(current_track); for (auto &det : visited_detections) { std::vector<int> connected_tracks; for (int j = 1; j < cost_matrix.cols; ++j) { if (cost_matrix.at<int>(det, j) == 1) { connected_tracks.push_back(j); } } for (auto tr : connected_tracks) { if (visited_tracks.count(tr) || potential_tracks.count(tr)) { continue; } potential_tracks.insert(tr); potential_tracksv.push_back(tr); } } }
时间: 2024-04-28 13:23:26 浏览: 134
CMA_tracks.rar_Tracks_cma_台风_台风 路径_台风风速
5星 · 资源好评率100%
这是一个 while 循环,其中 potential_tracks 是一个 std::set<int> 类型的容器,表示待处理的轨迹集合。在每一次循环迭代中,取出 potential_tracks 容器中的最后一个元素 current_track,并将其从 potential_tracks 容器中移除。
接下来,循环处理 cost_matrix 矩阵中与 current_track 相关联的检测对象,并将其加入 visited_detections 容器中。然后将 current_track 加入 visited_tracks 容器中。
接着,针对 visited_detections 容器中的每个检测对象,找到与其相关联的轨迹集合 connected_tracks,如果这些轨迹中有已经被访问过或正在处理的轨迹,则跳过不处理。否则,将这些轨迹加入 potential_tracks 容器中,继续下一轮处理。
循环迭代直到 potential_tracks 容器为空,表示所有与起始轨迹相关联的轨迹都已经处理完毕,并且 visited_tracks 容器中包含了所有已经访问过的轨迹。
阅读全文