Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 꼭짓점 간 도달성 행렬을 계산하는 프로그램

<시간/>

인접 목록 표현으로 그래프가 있다고 가정하고 2D 행렬 M을 찾아야 합니다. 여기서

  • 정점 i와 j 사이에 경로가 있을 때 M[i, j] =1입니다.

  • 그렇지 않으면 M[i, j] =0입니다.

따라서 입력이 다음과 같으면

Python에서 꼭짓점 간 도달성 행렬을 계산하는 프로그램

그러면 출력은

1 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • ans:=크기가 n x n인 2차원 행렬, 여기서 n은 꼭짓점의 수이며 0으로 채움

  • 0에서 n 사이의 i에 대해 수행

    • q:=대기열, 처음에 i 삽입

    • q가 비어 있지 않은 동안 수행

      • node:=q의 첫 번째 요소, q에서 첫 번째 요소 삭제

      • ans[i, node]가 0이 아니면

        • 다음 반복으로 이동

      • ans[i, 노드]:=1

      • 이웃:=그래프[노드]

      • 이웃의 각 n에 대해 수행

        • q 끝에 n 삽입

  • 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class Solution:
   def solve(self, graph):
      ans=[[0 for _ in graph] for _ in graph]
      for i in range(len(graph)):
         q=[i]
         while q:
            node=q.pop(0)
            if ans[i][node]: continue
            ans[i][node]=1
            neighbors=graph[node]
            for n in neighbors:
               q.append(n)
      return ans
ob = Solution()
adj_list = [[1,2],[4],[4],[1,2],[3]]
priunt(ob.solve(adj_list))

입력

[[1,2],[4],[4],[1,2],[3]]

출력

[[1, 1, 1, 1, 1],
   [0, 1, 1, 1, 1],
   [0, 1, 1, 1, 1],
   [0, 1, 1, 1, 1],
   [0, 1, 1, 1, 1]
]