1.git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比方: base'<--base<--A<--A' ^ | --- B<--B' 小米project师经常须要寻找两个分支近期的切割点,即base.如果git 树是多叉树,请实现一个算法。计算git树上随意两点的近期切割点。

(如果git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包括n个字符串,每一个字符串由字符'0'或'1'组成。长度为n。matrix[i][j]=='1'当且仅当git树种第i个和第j个节点有连接。节点0为git树的根节点。)

#include<vector>
#include<string>
#include<iostream>
using namespace std;
int getSplitNode(vector<string> matrix, int indexA, int indexB) { int m = matrix.size();
vector<vector<int>> fu(m);
for (int i = 0; i < m; i++)
for (int j = i+1; j < m; j++)
{
if (matrix[i][j] == '1')
fu[i].push_back(j);
}
vector<int> a;
vector<int> b;
int t1 = 0;
a.push_back(indexA); int t2 = 0;
b.push_back(indexB);
while (indexA != 0){
for (int i = 0; i < fu.size(); i++)
{
for (int j = 0; j < fu[i].size(); j++){
if (fu[i][j] == indexA)
{
a.push_back(i);
indexA = i;
break;
}
}
if (indexA == 0)
break;
}
} while (indexB > 0){
for (int i = 0; i < fu.size(); i++){
for (int j = 0; j < fu[i].size(); j++){
if (fu[i][j] == indexB)
{
b.push_back(i);
indexB = i;
break;
}
}
if (indexB == 0)
break;
}
}
t1 = a.size();
t2 = b.size();
t1--;
t2--;
while (a[t1] == b[t2]){ t1--;
t2--;
if (t1 < 0 || t2 < 0)
break;
}
return a[++t1]; }
int main()
{
vector<string> matrix = { "011001", "100010", "100100", "001000", "010000","100000" };
/*matrix[0] = "01011";
matrix[1] = "10100";
matrix[2] = "01000";
matrix[3] = "10000";
matrix[4] = "10000";*/
cout << getSplitNode(matrix, 5, 3) << endl;
getchar();
}

计算git树上随意两点的近期切割点。的更多相关文章

  1. git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0

    // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  2. Openlayers3 计算地图上随意两点间的距离

    相应的openlayers的版本号为3.7. 主要用的接口是ol.Sphere.haversineDistance([x1,y1],[x2,y2]): 4326坐标系中计算两点距离的方式为: var ...

  3. HDU 2376 树形dp|树上任意两点距离和的平均值

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=2376 经典问题,求的是树上任意两点和的平均值. 这里我们不能枚举点,这样n^2的复杂度.我们可以枚举每一条 ...

  4. 随心所欲生成git仓库随意一段commit的专用patch应用小实践

     随心所欲生成git仓库随意一段commit的专用patch应用小实践 我们在开发中.时不时的可能要去做一个patch给你的下线,或者你的合作者.在git管理中,我们知道有git format-pat ...

  5. JAVA 计算地球上任意两点(经纬度)距离

    /** * 计算地球上任意两点(经纬度)距离 * * @param long1 * 第一点经度 * @param lat1 * 第一点纬度 * @param long2 * 第二点经度 * @para ...

  6. caioj 1237: 【最近公共祖先】树上任意两点的距离 在线倍增ST

    caioj 1237: [最近公共祖先]树上任意两点的距离 倍增ST 题目链接:http://caioj.cn/problem.php?id=1237 思路: 针对询问次数多的时候,采取倍增求取LCA ...

  7. HDU 5723 Abandoned country(kruskal+dp树上任意两点距离和)

    Problem DescriptionAn abandoned country has n(n≤100000) villages which are numbered from 1 to n. Sin ...

  8. HDU2376Average distance(树形dp|树上任意两点距离和的平均值)

    思路: 引:如果暴力枚举两点再求距离是显然会超时的.转换一下思路,我们可以对每条边,求所有可能的路径经过此边的次数:设这条边两端的点数分别为A和B,那 么这条边被经过的次数就是A*B,它对总的距离和的 ...

  9. PHP根据两点间的经纬度计算距离,php两点经纬度计算(转)

    这是一个不错的示例,直接贴代码,首先要知道纬度值.经度值 /** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经 ...

随机推荐

  1. struct数组初始化

    const int MAXN=100; struct A { int a,b; }; struct A arr[100];//此时编译通过 struct A arr[MAXN];//此时编译不通过,原 ...

  2. PHP中字符串比较的常用方法

    PHP中字符串比较的常用方法 一.总结 1.其实应该是直接等于号就可以了的 2.也可用strcmp,注意返回值 二.PHP中字符串比较的常用方法 1.按字节比较 按字节比较字符串是最常用的方法.其中可 ...

  3. ::的类名前有个 & ,什么意思?

    转载自  http://www.imooc.com/qadetail/93985 MazePerson &MazePerson::setPersonPosition(int coordinat ...

  4. 新技能 get —— 如何校验 md5(windows)

    我们在某资源网站上下载完成指定文件后,尤其是一些下载所需较高时长的大型文件,如何检验下载的文件是否完好,也即如何保证和原始网站上的资源一样.此时就要用到检验码的机制,一般文件的下载界面,通常都会给出此 ...

  5. django-rest-framework框架 第四篇 认证Authentication

    认证Authentication 什么是身份认证 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或与其签名的令牌)关联的机制. 视图的最开始处运行身份验证 在权限和限制检查发生之前,以及在允许 ...

  6. 我的第一个JS组件-跨浏览器JS调试工具

    武汉九天鸟-p2p网贷系统开发-互联网应用软件开发 公司官网:http://jiutianniao.com  社交问答:http://ask.jiutianniao.com 最近,在看公司一个JS大牛 ...

  7. CISP/CISA 每日一题 八

    CISA 每日一题(答)网关执行电子邮件格式转换 电子邮件安全——加密 大文件——对称加密 不可否认——非对称 哈希——完整性     电子银行主要风险: 战略.经营和声誉上的风险 双SSP每日一题 ...

  8. Skill of vim

    用vim也有一段时间了,谨以此记下一些有意思的技巧. 跳转 hjkl,左下右上. b/e跳转到上/下一个单词 ^/$跳转到行头/尾 从{,[,(,相应的},],)相互跳转.能够用% 跳转到局部变量的定 ...

  9. js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么

    js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么 一.总结 一句话总结:两者都是对表单进行序列化,serializeArray()返回的是json ...

  10. 查看网站使用何种框架或者技术的插件——Wappalyzer

    Wappalyzer这款插件很强大,可以查看任何网站使用的技术,包括后端语言框架和前端语言框架.还有服务器是何种类型.甚至各种版本... 插件官网:https://wappalyzer.com/