>백엔드 개발 >PHP 튜토리얼 >PHP 역추적 알고리즘 예제 공유

PHP 역추적 알고리즘 예제 공유

小云云
小云云원래의
2018-01-26 13:40:331667검색

이 글에서는 주로 PHP에서 구현되는 역추적 알고리즘을 소개하고 문자열과 배열의 재귀, 순회, 연산 및 기타 관련 연산 기술을 포함한 구체적인 예를 들어 PHP 역추적 알고리즘의 구현 단계와 사용 방법을 분석합니다. 참조가 필요합니다. 모두에게 도움이 되기를 바랍니다.

질문:

큰 소 낙타 한 마리에는 쌀 2포가 있고, 중간 소 낙타 한 마리에는 쌀 한 포대가 있으며, 작은 소 낙타 두 마리에는 쌀 한 포가 있고, 중형 소 낙타 두 마리에는 쌀이 몇 마리 있습니다. 쌀 100포대에는 소가 몇 마리 필요합니까?

구현 코드:


<?php
/*
 * k = 2x + y + 1/2z
 取值范围
 * 0 <= x <= 1/2k
 * 0 <= y <= k
 * 0 <= z < = 2k
 * x,y,z最大值 2k
 */
$daMi = 100;
$result = array();
function isOk($t,$daMi,$result)
{/*{{{*/
 $total = 0;
 $hash = array();
 $hash[1] = 2;
 $hash[2] = 1;
 $hash[3] = 0.5;
 for($i=1;$i<=$t;$i++)
 {
 $total += $result[$i] * $hash[$i];
 }
 if( $total <= $daMi)
 {
 return true;
 }
 return false;
}/*}}}*/
function backtrack($t,$daMi,$result)
{/*{{{*/
 //递归出口
 if($t > 3)
 {
 //输出最优解
 if($daMi == (2 * $result[1] + $result[2] + 0.5 * $result[3]))
 {
  echo "最优解,大米:${daMi},大牛:$result[1],中牛: $result[2],小牛:$result[3]\n";
 }
 return;
 }
 for($i = 0;$i <= 2 * $daMi;$i++)
 {
 $result[$t] = $i;
 //剪枝
 if(isOk($t,$daMi,$result))
 {
  backtrack($t+1,$daMi,$result);
 }
 $result[$t] = 0;
 }
}/*}}}*/
backtrack(1,$daMi,$result);
?>

실행 결과는 다음과 같습니다.

관련 권장 사항:

n 퀸 문제를 해결하기 위한 PHP 역추적 알고리즘_PHP 튜토리얼


위 내용은 PHP 역추적 알고리즘 예제 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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