0, 1, ..., n-1로 레이블이 지정된 노드가 있는 방향 그래프가 있다고 가정합니다. 이 그래프에서 각 모서리는 빨간색 또는 파란색으로 표시되며 자체 모서리 또는 평행 모서리가 있을 수 있습니다. red_edges의 각 [i, j]는 노드 i에서 노드 j까지의 빨간색 방향 에지를 나타냅니다. 마찬가지로, blue_edges의 각 [i, j]는 노드 i에서 노드 j까지의 파란색 방향 에지를 나타냅니다. 우리는 길이가 n인 배열 응답을 찾아야 합니다. 여기서 각 응답[X]은 노드 0에서 노드 X까지의 최단 경로 길이이므로 가장자리 색상이 경로를 따라 번갈아가며(또는 그러한 경로가 그렇지 않은 경우 -1) 존재).
따라서 입력이 n =3, red_edges =[[0,1],[1,2]] 및 blue_edges =[]인 경우 출력은 [0, 1, -1]
이 문제를 해결하기 위해 다음 단계를 따릅니다.
-
bfs()라는 메서드를 정의하면 re, be, f 및 n
이 필요합니다. -
방문이라는 집합을 정의하고 대기열을 정의하고 삼중항 [0, f, 0]
을 삽입합니다. -
q가 비어 있지 않은 동안
-
삼중항 전류, 색상, 단계를 q[0]으로 설정하고 q에서 삭제
-
color :=color 값을 보완(true와 false, 그 반대)
-
res[current] :=res[current] 및 단계의 최소값
-
색상이 0이 아닌 경우
-
re[current]
의 각 i에 대해-
쌍(i, color)이 방문되지 않은 경우 방문에 (i, color)를 삽입하고 q
에 [i, color, step + 1]을 삽입합니다.
-
-
-
그렇지 않으면 색상이 0이면
-
be[current]
의 각 i에 대해-
쌍(i, color)이 방문되지 않은 경우 방문에 (i, color)를 삽입하고 q
에 [i, color, step + 1]을 삽입합니다.
-
-
-
-
주요 방법 -
-
res :=무한대 값의 배열이고 크기는 n
-
re 및 be :=n개의 빈 배열로 구성된 배열
-
r의 각 요소 i에 대해:i[1]을 re[i[0]]
에 삽입 -
b의 각 요소 i에 대해:i[1]을 be[i[0]]
에 삽입 -
bfs(re, be, false, n) 호출 및 bfs(re, be, true, n) 호출
-
범위 0에서 res의 길이 – 1까지의 i에 대해
-
res[i] =inf이면 res[i] :=-1
-
-
반환 해상도
예제(파이썬)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
class Solution(object):def shortestAlternatingPaths(self, n, r, b):self.res =[float("inf")] * n re =[[] for i in range(n) ] be =[[] for i in range(n) ] for i in r:re[i[0]].append(i[1]) for i in b:be[i[0]].append(i[1] ) self.bfs(re,be,False,n) self.bfs(re,be,True,n) for i in range(len(self.res)):if self.res[i] ==float(' inf'):self.res[i]=-1 return self.res def bfs(self,re,be,f,n):방문 =set() queue =[[0,f,0]] while queue:current,color,step =queue[0] queue.pop(0) color =not color self.res[current] =min(self.res[current],step) if color:for i in re[current]:if (i,color) 방문하지 않음:Visited.add((i,color)) queue.append([i,color,step+1]) elif not color:for i in be[current]:if (i,color ) 방문하지 않음:Visited.add((i,col 또는)) queue.append([i,color,step+1])ob =Solution()print(ob.shortestAlternatingPaths(3, [[0,1], [1,2]], []))사전>입력
3[[0,1],[1,2]][]출력
[0,1,-1]