• 小米Git


    这个题目的意思其实就是要分别从根节点开始遍历(dfs)到给定的两个点,然后从得出的路径中获取最早相同的点即为结果。

     
    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 == indexB) return indexA;
            
            int len = matrix.size();
            vector<int> vis1(len , 0);
            vector<int> vis2(len , 0);
            vector<int> rds1;
            vector<int> rds2;
            
            rds1.push_back(0);
            rds2.push_back(0);
            vis1[0] = 1;
            vis2[0] = 1;
    
            getRoadList(matrix,0,indexA,vis1,rds1);
            getRoadList(matrix,0,indexB, vis2,rds2);
            int ans = 0 , j = rds1.size() -1 ;
       
            for( ; j > 0 ; j --)
                for( int i = rds2.size() -1 ; i > 0 ; i --){
                
                if(rds1[j] == rds2[i])
                    return rds1[j];
                
            }
            
            return ans; 
        }
        
        bool getRoadList(vector<string> matrix , int start , int index , vector<int>& vis, vector<int>& rds){
            
             string str = matrix[start];
             
             for(int i = 0 ;  i < str.length() ; i ++){
                 
                 if(vis[i]) continue;
                 
                 if(str[i] == '1' ){
                     vis[i] = 1;
                     if(i == index){
                     	rds.push_back(index);
                        
                     	return true;
                 	 }
                 	 else{
                    	rds.push_back(i);
                      	if(!getRoadList(matrix , i , index ,  vis , rds)){
                               rds.pop_back();
                               vis[i] = 0;
                        }else{
                            return true;
                        }
                 	 }
                   
                 }
             }   
          
            return false;
        }
        
        
    };
    

      

  • 相关阅读:
    Android SDK更新 Connection to http://dlssl.google.com refused 解决方法
    rsync服务架设(数据同步|文件增量备份)
    cocos2dx 环境搭建
    GMT、UTC、PDT 时间是什么?Linux下如何调整时区
    测试日志
    处理Oracle中杀不掉的锁
    熟悉常用的Linux操作
    综合练习:英文词频统计
    编译原理
    字符串、组合数据类型练习
  • 原文地址:https://www.cnblogs.com/castlehappiness/p/5828153.html
Copyright © 2020-2023  润新知