>백엔드 개발 >PHP 튜토리얼 >PHP에서 Floyd-Warshall 알고리즘을 사용하여 최단 경로 찾기를 구현하는 방법

PHP에서 Floyd-Warshall 알고리즘을 사용하여 최단 경로 찾기를 구현하는 방법

WBOY
WBOY원래의
2023-06-25 21:20:221629검색

컴퓨터 과학 분야에서 Floyd-Warshall 알고리즘(줄여서 FW 알고리즘)은 모든 노드 쌍에 대한 최단 경로 문제를 해결하는 동적 프로그래밍 알고리즘입니다. 모든 간선의 가중치가 양수이거나 음수이고 시간 및 공간 복잡도 최적화 문제가 모두 있는 방향성 또는 방향성 그래프를 해결할 수 있습니다.

PHP에서는 FW 알고리즘을 구현하는 방법이 여러 가지가 있는데, 그 중 하나는 2차원 배열을 사용하여 심장의 인접 행렬을 표현하는 것입니다. 구체적인 단계는 다음과 같습니다.

  1. 인접 행렬 만들기

인접 행렬은 각 요소가 두 정점 사이의 거리를 나타내는 2차원 배열입니다. 두 정점 사이에 연결이 없으면 값은 무한대입니다. PHP에서 인접 행렬은 다음과 같은 방법으로 초기화될 수 있습니다:

// Initialize an empty adjacency matrix
$adjMatrix = [];

// Fill the adjacency matrix with infinite values
for($i=0; $i<$n; $i++) {
  for($j=0; $j<$n; $j++) {
    $adjMatrix[$i][$j] = INF;
  }
}

// Assign values to the adjacency matrix
for($i=0; $i<count($edges); $i++) {
  $source = $edges[$i][0];
  $dest = $edges[$i][1];
  $weight = $edges[$i][2];
  $adjMatrix[$source][$dest] = $weight;
}

여기서 $n은 전체 그래프의 노드 수를 나타내고 $edges는 시작점, 끝점 및 가중치를 포함한 가장자리의 수 배열을 나타냅니다. 각 가장자리의.

  1. 행렬 dp 배열 만들기

dp 배열은 2차원 배열이기도 하며, 각 요소는 시작점에서 해당 점까지의 최단 경로 길이를 나타냅니다. 초기화를 위해 인접 행렬을 사용합니다.

$dp = $adjMatrix;
  1. FW 알고리즘을 사용하여 최단 경로를 찾습니다
for($k=0; $k<$n; $k++) {
  for($i=0; $i<$n; $i++) {
    for($j=0; $j<$n; $j++) {
      if ($dp[$i][$j] > $dp[$i][$k] + $dp[$k][$j]) {
        $dp[$i][$j] = $dp[$i][$k] + $dp[$k][$j];
      }
    }
  }
}

여기서 $k, $i, $j$는 각각 노드 행렬의 행 및 열 첨자를 나타냅니다.

  1. 출력 결과
for($i=0; $i<$n; $i++) {
  for($j=0; $j<$n; $j++) {
    if($dp[$i][$j] == INF) {
      echo "INF ";
    } else {
      echo $dp[$i][$j]." ";
    }
  }
  echo "
";
}

위는 PHP에서 FW 알고리즘을 사용하여 최단 경로를 찾는 과정입니다. 실제 애플리케이션에서는 실제 요구 사항을 충족하기 위해 특정 상황에 따라 알고리즘 최적화 및 성능 조정을 수행해야 한다는 점은 주목할 가치가 있습니다.

위 내용은 PHP에서 Floyd-Warshall 알고리즘을 사용하여 최단 경로 찾기를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.