当前位置:网站首页>6134. 找到离给定两个节点最近的节点-力扣双百代码
6134. 找到离给定两个节点最近的节点-力扣双百代码
2022-08-01 23:09:00 【Mr Gao】
6134. 找到离给定两个节点最近的节点
给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,每个节点 至多 有一条出边。
有向图用大小为 n 下标从 0 开始的数组 edges 表示,表示节点 i 有一条有向边指向 edges[i] 。如果节点 i 没有出边,那么 edges[i] == -1 。
同时给你两个节点 node1 和 node2 。
请你返回一个从 node1 和 node2 都能到达节点的编号,使节点 node1 和节点 node2 到这个节点的距离 较大值最小化。如果有多个答案,请返回 最小 的节点编号。如果答案不存在,返回 -1 。
注意 edges 可能包含环。
示例 1:
输入:edges = [2,2,3,-1], node1 = 0, node2 = 1
输出:2
解释:从节点 0 到节点 2 的距离为 1 ,从节点 1 到节点 2 的距离为 1 。
两个距离的较大值为 1 。我们无法得到一个比 1 更小的较大值,所以我们返回节点 2 。
示例 2:
输入:edges = [1,2,-1], node1 = 0, node2 = 2
输出:2
解释:节点 0 到节点 2 的距离为 2 ,节点 2 到它自己的距离为 0 。
两个距离的较大值为 2 。我们无法得到一个比 2 更小的较大值,所以我们返回节点 2 。
解题代码如下:
void dfs( int* edges, int edgesSize, int node,int *dnode,int d,int *r){
r[node]++;
if(d<dnode[node]&&r[node]<=1){
dnode[node]=d;
}
if(edges[node]!=-1&&r[node]<2){
dfs(edges,edgesSize,edges[node],dnode,d+1,r);
}
}
void dfs2( int* edges, int edgesSize, int node,int *dnode,int d,int *r){
r[node]++;
// printf("ndoe %d ",node);
if(d>dnode[node]&&r[node]<=1){
dnode[node]=d;
}
// printf("edges[node] r[node] %d %d ",edges[node],r[node]);
if(edges[node]!=-1&&r[node]<2){
// printf("dfasfsd");
dfs2(edges,edgesSize,edges[node],dnode,d+1,r);
// printf(" sdfasfsd");
}
}
int closestMeetingNode(int* edges, int edgesSize, int node1, int node2){
int *dnode=(int *)malloc(sizeof(int )*edgesSize);
int *r=(int *)malloc(sizeof(int )*edgesSize);
int *r2=(int *)malloc(sizeof(int )*edgesSize);
int i;
for(i=0;i<edgesSize;i++){
dnode[i]=1000000;
r[i]=0;
r2[i]=0;
}
dfs(edges,edgesSize,node1,dnode,0,r);
dfs2(edges,edgesSize,node2,dnode,0,r2);
int min=10000000;
for(i=0;i<edgesSize;i++){
if(dnode[i]<min&&r[i]>=1&&r2[i]>=1){
min=dnode[i];
}
}
//printf("min %d ",min);
for(i=0;i<edgesSize;i++){
if(dnode[i]==min&&r[i]>=1&&r2[i]>=1){
return i;
}
}
return -1;
}
边栏推荐
- How do programmers solve online problems gracefully?
- 美赞臣EDI 940仓库装运订单详解
- qt-faststart 安装使用
- 将vim与系统剪贴板的交互使用
- Graph Theory - Strongly Connected Component Condensation + Topological Sort
- 加载字体时避免隐藏文本
- [Recommended books] The first self-driving technology book
- 程序员如何优雅地解决线上问题?
- CF1705D Mark and Lightbulbs
- 03. GO language variable definition, function
猜你喜欢

JS prototype hasOwnProperty in Add method Prototype end point Inherit Override parent class method

小程序毕设作品之微信美食菜谱小程序毕业设计成品(6)开题答辩PPT

chrome复制一张图片的base64数据

【SeaTunnel】从一个数据集成组件演化成企业级的服务

解决端口占用

小程序毕设作品之微信体育馆预约小程序毕业设计成品(2)小程序功能

访问控制台中的选定节点

关于ETL的两种架构(ETL架构和ELT架构)

从0到100:招生报名小程序开发笔记

系统可用性:SRE口中的3个9,4个9...到底是个什么东西?
随机推荐
Codeforces CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-D 题解
Wechat Gymnasium Reservation Mini Program Graduation Design Finished Work Mini Program Graduation Design Finished Product (2) Mini Program Function
使用Jenkins做持续集成,这个知识点必须要掌握
UML diagram of soft skills
域名重定向工具 —— SwitchHosts 实用教程
如何使用pywinauto和pyautogui将动漫小姐姐链接请回家
Error creating bean with name ‘dataSource‘:Unsatisfied dependency expressed through field ‘basicPro
隔离和降级
三、mysql 存储引擎-建库建表操作
13、学习MySQL 分组
y84. Chapter 4 Prometheus Factory Monitoring System and Actual Combat -- Advanced Prometheus Alarm Mechanism (15)
How to add a game character to a UE4 scene
Use Jenkins for continuous integration, this knowledge point must be mastered
测试岗月薪5-9k,如何实现涨薪到25k?
萍不回答
PHP算法之有效的括号
Chapter 11 Working with Dates and Times
From 0 to 100: Notes on the Development of Enrollment Registration Mini Programs
[Recommended books] The first self-driving technology book
选择合适的 DevOps 工具,从理解 DevOps 开始