zoukankan      html  css  js  c++  java
  • 小米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;
        }
        
        
    };
    

      

  • 相关阅读:
    java基础--字符转换Unicode
    java基础---集合框架
    洛谷 P2049 魔术棋子(vector)
    洛谷 P3133 [USACO16JAN]Radio Contact G
    洛谷 P2679 子串
    洛谷 P2549 计算器写作文
    洛谷 P2758 编辑距离
    洛谷 P1481 魔族密码
    洛谷 P1754 球迷购票问题
    洛谷 P2782 友好城市
  • 原文地址:https://www.cnblogs.com/castlehappiness/p/5828153.html
Copyright © 2011-2022 走看看