如何建设一个自己的网站,开网店无货源,申请注册邮箱163免费注册,流量推广平台今日份题目#xff1a;
n 座城市#xff0c;从 0 到 n-1 编号#xff0c;其间共有 n-1 条路线。因此#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择#xff08;路线网形成一颗树#xff09;。去年#xff0c;交通运输部决定重新规划路线#xff0c;以…今日份题目
n 座城市从 0 到 n-1 编号其间共有 n-1 条路线。因此要想在两座不同城市之间旅行只有唯一一条路线可供选择路线网形成一颗树。去年交通运输部决定重新规划路线以改变交通拥堵的状况。
路线用 connections 表示其中 connections[i] [a, b] 表示从城市 a 到 b 的一条有向路线。
今年城市 0 将会举办一场大型比赛很多游客都想前往城市 0 。
请你帮助重新规划路线方向使每个城市都可以访问城市 0 。返回需要变更方向的最小路线数。
题目数据 保证 每个城市在重新规划路线方向后都能到达城市 0 。
示例1 输入n 6, connections [[0,1],[1,3],[2,3],[4,0],[4,5]]
输出3
解释更改以红色显示的路线的方向使每个城市都可以到达城市 0 。
示例2 输入n 5, connections [[1,0],[1,2],[3,2],[3,4]]
输出2
解释更改以红色显示的路线的方向使每个城市都可以到达城市 0 。
示例3
输入n 3, connections [[1,0],[2,0]]
输出0
提示 2 n 5 * 10^4 connections.length n-1 connections[i].length 2 0 connections[i][0], connections[i][1] n-1 connections[i][0] ! connections[i][1]
题目思路
这道题我们使用bfs广度优先遍历。拿例1为例我们只需要从0开始遍历由于路径单向通行故与这些点的连线都需要反向除此之外下边那条边直接找是无法从0走过去的但还有条路需要反向这时我们引入反向图在正向bfs的同时对反向图同样bfs放入同一个队列中这样就可以保证图中所有不满足条件的边都被记录下来了。
所谓反向图就是将图中所有的路径反向ij处的值与ji处的值交换。
代码
class Solution
{
public:int minReorder(int n, vectorvectorint connections) {vectorvectorint graph(n);//正向图vectorvectorint antigraph(n);//反向图for(auto c:connections) {graph[c[0]].push_back(c[1]);//记录正向图antigraph[c[1]].push_back(c[0]);//记录反向图}int ans0;int visited[100000]{0};visited[0]1;queueint p;p.push(0);//bfswhile(!p.empty()) {//获取当前点信息int ip.front();p.pop();//正向遍历搜寻结果for(int j0;jgraph[i].size();j){if(visited[graph[i][j]]0) {visited[graph[i][j]]1;//标记为已到达过ans;//0向外能到达的点的路径就是需要反向的路径p.push(graph[i][j]);}}//反向遍历搜寻结果for(int j0;jantigraph[i].size();j){if(visited[antigraph[i][j]]0) {visited[antigraph[i][j]]1;//标记为已到达过p.push(antigraph[i][j]);} } }return ans;}
};提交结果 欢迎大家在评论区讨论如有不懂的代码部分欢迎在评论区留言