1466. 重新规划路线
题目链接:1466. 重新规划路线
代码如下:
class Solution
{
public:
int minReorder(int n, vector<vector<int>>& connections)
{
vector<vector<pair<int,int>>> graph(n);
//构建图
for(const auto& conn:connections)
{
graph[conn[0]].emplace_back(conn[1],1);// conn[0]指向conn[1],标记为1
graph[conn[1]].emplace_back(conn[0],0);// conn[1]不指向conn[0],标记为0
}
vector<bool> visited(n,false);
res=0;
bfs(graph,visited);
return res;
}
void bfs(const vector<vector<pair<int,int>>>& graph,vector<bool>& visited)
{
visited[0]=true;
queue<int> que;
que.push(0);//从0节点开始遍历
while(!que.empty())
{
int node=que.front();
que.pop();
for(auto& neighbor:graph[node])
{
if(visited[neighbor.first]) {continue;}//跳过处理过的节点
visited[neighbor.first]=true;//处理该节点
que.push(neighbor.first); //邻接点入队
if(neighbor.second) {res+=1;}//如果当前节点指向邻接点,需要反向
}
}
}
private:
int res;
};