class Solution {
public int[] shortestAlternatingPaths(int n, int[][] red_edges, int[][] blue_edges) {
int[] res = new int[n];
Arrays.fill(res, Integer.MAX_VALUE);
res[0] = 0;
boolean[] redVis = new boolean[red_edges.length];
boolean[] blueVis = new boolean[blue_edges.length];
Arrays.fill(redVis, false);
Arrays.fill(blueVis, false);
dfs(res, 0, -1, 0, redVis, blueVis, red_edges, blue_edges);
for(int i=0;i<res.length;i++)
if(res[i] == Integer.MAX_VALUE)
res[i] = -1;
return res;
}
//color 0 red
//color 1 blue
static void dfs(int[] res, int curIdx, int color, int curWeight, boolean[] redVis, boolean[] blueVis, int[][] red_edges, int[][] blue_edges) {
//遍历红色边
if(curWeight < res[curIdx])
res[curIdx] = curWeight; //update value
// if(curWeight > res[curIdx])
// return; //剪枝
if(color != 0) {
for(int i=0;i<red_edges.length;i++) {
if(!redVis[i] && red_edges[i][0]==curIdx) {
redVis[i] = true;
dfs(res, red_edges[i][1], 0, curWeight+1,redVis, blueVis, red_edges, blue_edges);
redVis[i] = false;
}
}
}
if(color != 1) {
for(int i=0;i<blue_edges.length;i++) {
if(!blueVis[i] && blue_edges[i][0]==curIdx) {
blueVis[i] = true;
dfs(res, blue_edges[i][1], 1, curWeight+1, redVis, blueVis, red_edges, blue_edges);
blueVis[i] = false;
}
}
}
//遍历蓝色边
}
}
当时写了个利用dfs的超时代码,复杂度是。