这道题的思路跟
1091. Shortest Path in Binary Matrix
是一样的
class Solution {
public int[] shortestAlternatingPaths(int n, int[][] red_edges, int[][] blue_edges) {
int[][] nn_red = new int[n][n];
int[][] nn_blue = new int[n][n];
for(int i = 0; i < red_edges.length; ++i){
nn_red[red_edges[i][0]][red_edges[i][1]] = 1;
}
for(int i = 0; i < blue_edges.length; ++i){
nn_blue[blue_edges[i][0]][blue_edges[i][1]] = 1;
}
int[] res = new int[n];
for(int i = 1; i < res.length; ++i){
res[i] = -1;
}
List<int[]> q = new ArrayList<>();
for(int i = 0; i < nn_red[0].length; ++i){
if(nn_red[0][i] == 1){
nn_red[0][i] = 0;
q.add(new int[]{i, 0});
res[i] = 1;
}
}
for(int i = 0; i < nn_blue[0].length; ++i){
if(nn_blue[0][i] == 1){
nn_blue[0][i] = 0;
q.add(new int[]{i, 1});
res[i] = 1;
}
}
q.add(new int[]{n, n});
int len = 2;
while(!q.isEmpty()){
int[] out = q.get(0);
q.remove(0);
if(out[0] == n && out[1] == n){
if(q.isEmpty()){
break;
}else{
q.add(new int[]{n, n});
++len;
continue;
}
}
for(int i = 0; i < nn_red[out[0]].length; ++i){
if(nn_red[out[0]][i] == 1 && out[1] == 1){
nn_red[out[0]][i] = 0;
q.add(new int[]{i, 0});
if(res[i] <= 0){
res[i] = len;
}
}
}
for(int i = 0; i < nn_blue[out[0]].length; ++i){
if(nn_blue[out[0]][i] == 1 && out[1] == 0){
nn_blue[out[0]][i] = 0;
q.add(new int[]{i, 1});
if(res[i] <= 0){
res[i] = len;
}
}
}
}
res[0] = 0;
return res;
}
}