2016-10-05 2 views
-2

私はテキストファイルを処理する関数を作りたいと思います。グリッド上の2つの異なるポイント間の最短ルートを見つけるには?

ポイントにポイント1を達成するための最短の方法を見つけるし、テキストファイルを処理しなければなりません。この機能2.

例:

* 1 - - - * * 
* * * * - - * 
* * - - - * - 
* * * * - * - 
2 - * * - * - 
* - - * - * - 
* * - - - - - 
+2

これまでに何がありますか?これを達成するためにマンハッタン距離アルゴリズムを調べてください。それは最も簡単です。いくつかの努力を示す。 –

答えて

2

それは、最適化することができますが、私は数分を持っていました私が思いついたのはここを殺す。基本的な考え方は、ファイルを1行ずつ読み込んだ後、それを展開することです。線を繰り返し、次に各点がどこにあるかを示す文字を繰り返します。それぞれのXとYの違いを見つけ、その違いに基づいて文字列を生成します。出力は取得されたパスです。

<?php 
//39883901.txt is the text file above 
$File = fopen("39883901.txt", "r"); 
$Lines = array(); 
$PositionA = array(); 
$PositionB = array(); 
if($File) 
{ 
    while(($line = fgets($File)) !== false) 
    { 
     $Lines[] = explode(' ', $line); 
    } 

    fclose($File); 
} 
if(count($Lines) > 0) 
{ 
    foreach($Lines as $y => $xvalues) 
    { 
     foreach($xvalues as $x => $value) 
     { 
      if($value == '1') 
      { 
       $PositionA['x'] = $x; 
       $PositionA['y'] = $y; 
      } 
      if($value == '2') 
      { 
       $PositionB['x'] = $x; 
       $PositionB['y'] = $y; 
      } 
     } 
    } 
    if(isset($PositionA['x'], $PositionA['y'], $PositionB['x'], $PositionB['y'])) 
    { 
     $DifferenceX = $PositionB['x'] - $PositionA['x']; 
     $DifferenceY = $PositionB['y'] - $PositionA['y']; 
     $PadX = "R"; 
     $PadY = "D"; 
     if($DifferenceX < 0) 
     { 
      $PadX = "L"; 
      $DifferenceX = $DifferenceX * -1; 
     } 
     if($DifferenceY < 0) 
     { 
      $PadY = "U"; 
      $DifferenceY = $DifferenceY * -1; 
     } 
     $Travel = ""; 
     $Travel = str_repeat($PadX, $DifferenceX); 
     $Travel .= str_repeat($PadY, $DifferenceY); 

     echo "Travel Path: " . $Travel; 
     //Travel Path: LDDDD 
    } 
} 
?> 
関連する問題