日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'--base--A--A' ^ | --- B--B' 小米工程师常常需要寻找两个分支最近的分割点,即b...

發布時間:2023/11/29 编程问答 45 豆豆

// ConsoleApplication10.cpp : 定義控制臺應用程序的入口點。
//

#include "stdafx.h" #include <iostream> #include <vector> using namespace std;class Solution { public:/*** 返回git樹上兩點的最近分割點** @param matrix 接鄰矩陣,表示git樹,matrix[i][j] == '1' 當且僅當git樹中第i個和第j個節點有連接,節點0為git樹的跟節點* @param indexA 節點A的index* @param indexB 節點B的index* @return 整型*/int getSplitNode(vector<string> matrix, int indexA, int indexB) {if (indexA >= matrix.size() || indexB >= matrix.size()){return 0;}vector<int> depth;vector<int> parent;breadTraverl(matrix, depth, parent);int p=0;//如果同一深度,父節點相同,則分割點為父節點//同一深度,父節點不同,尋找父節點的父節點//不同深度,從深度高的往上過濾,每次過濾的時候判斷是否達到低的節點的深度;沒有之前,要判斷低的節點是否是深的節點的父節點if (depth[indexA] == depth[indexB]){int a = indexA;int b = indexB;while (parent[a]!=parent[b]){a = parent[a];b = parent[b];}p= parent[a];}else {int a = indexA;//a對應的節點深int b = indexB;bool flag = false;//未找到分割點if (depth[indexA] < depth[indexB]){a = indexB;b = indexA;}while (depth[a]!=depth[b])//當節點a和節點b不在同一個深度{if (parent[a] == b){p = b;flag = true;break;}else{--a;}}if (flag == false){int a = indexA;int b = indexB;while (parent[a] != parent[b]){a = parent[a];b = parent[b];}p = parent[a];}}return p;}//廣度優先遍歷圖void breadTraverl(vector<string> matrix, vector<int> &depth, vector<int> &parent){//visited數組,如何visited[i]為false,則被訪問過vector<bool> visited;// vector<int> depth;// vector<int> parent;for (int i = 0;i < matrix.size();++i){visited.push_back(true);depth.push_back(0);parent.push_back(0);}cout << "V_" << 0 << " ";visited[0] = false;depth[0] = 0;parent[0] = 0;//根節點的本身設置為自己for (int i = 0;i < matrix.size();++i){// cout << "matrix[0].length():" << matrix[0].length() << endl;for (int j = 0;j < matrix[0].length();++j){//注意:此處的matrix[i][j]應該為'1'而不是1if ((matrix[i][j] == '1')&& (visited[j] == true)){cout << "matrix[" << i << "]"<<"["<<j<<"]:" << matrix[i][j] << " ";cout << "visited["<<j<<"]:" << visited[j] << endl;cout << "V_" << j << " ";parent[j] = i;depth[j] = depth[i] + 1;visited[j] = false;}}}cout << endl;for (int i = 0;i < matrix.size();i++){cout << i << ":";cout << "parent:" << parent[i] << " ";cout << "depth:" << depth[i] << endl;}}};int main() {Solution so;vector<string> matrix;string str1 = "01011";string str2 = "10100";string str3 = "01000";string str4 = "10000";string str5 = "10000";matrix.push_back(str1);matrix.push_back(str2);matrix.push_back(str3);matrix.push_back(str4);matrix.push_back(str5);cout<<"結果:"<<so.getSplitNode(matrix, 0, 2);cout << endl;return 0; }

轉載于:https://www.cnblogs.com/wdan2016/p/6416627.html

總結

以上是生活随笔為你收集整理的git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'--base--A--A' ^ | --- B--B' 小米工程师常常需要寻找两个分支最近的分割点,即b...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。