题解 | #小米Git#

小米Git

https://www.nowcoder.com/practice/4fcd94851d9142458329fd1d3e5802a8

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param matrix string字符串一维数组 
     * @param versionA int整型 
     * @param versionB int整型 
     * @return int整型
     */

    public int Git (String[] matrix, int versionA, int versionB) {
        int n = matrix.length;
        List[] g = new List[n];
        for(int i = 0; i < n; i ++){
            g[i] = new ArrayList<Integer>();
        }
	  // 建图
        for(int i = 0; i < n; i ++){
            for(int j = 0; j < n; j ++){
                if(matrix[i].charAt(j) == '1'){
                    g[i].add(j);
                }
            }
        }
	  // 寻找路径
        List<Integer> pathA = new ArrayList<>();
        List<Integer> pathB = new ArrayList<>();
        int[] vis = new int[n];
        dfs(0, g, versionA, pathA, vis);
        Arrays.fill(vis, 0);
        dfs(0, g, versionB, pathB, vis);
	  	// 判断公共路径
        int i = 0, j = 0, res = -1;
        while(i < pathA.size() && j < pathB.size()){
            if(pathA.get(i) == pathB.get(j)){
                res = pathA.get(i);
            }else{
                break;
            }
            i ++;
            j ++;
        }
        return res;
    }
  	// 找两个点之间的路径
    private boolean dfs(int cur,List<Integer>[] g, int target, List<Integer> path, int[] vis){
        vis[cur] = 1;
        path.add(cur);
        if(cur == target)return true;
        for(int next : g[cur]){
            if(vis[next] == 0 && dfs(next, g, target, path, vis)){
                return true;
            }
        }
        path.remove(path.size() - 1);
        return false;
    }


    


}

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务