当前位置:网站首页>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;
}
边栏推荐
猜你喜欢

简单3D渲染器的制作

系统可用性:SRE口中的3个9,4个9...到底是个什么东西?

03、GO语言变量定义、函数

访问控制台中的选定节点

小程序毕设作品之微信体育馆预约小程序毕业设计成品(4)开题报告

Deep Learning Course2 Week 2 Optimization Algorithms Exercises

xss相关知识点以及从 XSS Payload 学习浏览器解码

03. GO language variable definition, function

y84. Chapter 4 Prometheus Factory Monitoring System and Actual Combat -- Advanced Prometheus Alarm Mechanism (15)

分享10套开源免费的高品质源码,免费源码下载平台
随机推荐
E - Integer Sequence Fair
D - Linear Probing- 并查集
毕业作业
Small application project works WeChat stadium booking applet graduation design of the finished product (1) the development profile
qt-faststart installation and use
Mini Program Graduation Works WeChat Food Recipe Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
IDEA常用插件
数据分析04
PAM Palindromic Automata
Create virtual environments with virtualenv and Virtualenvwrapper virtual environment management tools
使用Jenkins做持续集成,这个知识点必须要掌握
数据增强--学习笔记(图像类,cnn)
欧拉路径与欧拉回路
CAKE:一个用于多视图知识图谱补全的可扩展性常识感知框架
【好书推荐】第一本无人驾驶技术书
JS 数组去重(含简单数组去重、对象数组去重)
excel vertical to horizontal
萍不回答
y84. Chapter 4 Prometheus Factory Monitoring System and Actual Combat -- Advanced Prometheus Alarm Mechanism (15)
小程序毕设作品之微信美食菜谱小程序毕业设计成品(8)毕业设计论文模板