Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte grafische Erklärung zur Implementierung von Schlangenmatrix, Schleifenmatrix und digitaler Spiralmatrix in PHP

Detaillierte grafische Erklärung zur Implementierung von Schlangenmatrix, Schleifenmatrix und digitaler Spiralmatrix in PHP

墨辰丷
墨辰丷Original
2018-05-22 10:04:181453Durchsuche

Dieser Artikel stellt hauptsächlich die Methode zur Realisierung von Schlangenmatrix, Schleifenmatrix und digitaler Spiralmatrix in PHP vor. Er analysiert die Konzepte, Darstellungsmethoden und PHP-Implementierungsfähigkeiten von Schlangenmatrix, Schleifenmatrix und digitaler Spiralmatrix anhand spezifischer Beispiele Weitere Informationen finden Sie unter

:

Die Schleifenmatrix bezieht sich auf eine Matrixsequenz, die von vorne beginnt und in der Reihenfolge von oben, rechts, unten und weiter ansteigt links. Zum Beispiel:

1 2 3
8 9 4
7 6 5

Erfordert jetzt:

Eingabe: m, n, jeweils für die Anzahl der Zeilen und Spalten
Ausgabe: m * n Schleifenmatrix

Beispiel:

Eingabe:

7 8

Ausgabe:

1 2 3 4 5 6 7 8
26 27 28 29 30 31 32 9
25 44 45 46 47 48 33 10
24 43 54 57 56 49 34 11
23 42 53 52 51 50 35 12
22 41 40 39 38 37 36 13
21 20 19 18 17 16 15 14

Als nächstes verwenden wir PHP, um es zu implementieren. Hier kapseln wir es in einen Funktionsaufruf

Die erste Idee

Befolgen Sie direkt das oben Gesagte. Durchqueren Sie in der Reihenfolge rechts, unten und links, und es ist in Ordnung, die Anzahl der durchquerten Schichten zu berechnen

function snake($row = 5, $col = 5)
{
  // 结果集
  $res = array();
  // 初始值
  $start = 1;
  // 当前遍历层数
  $flag = intval(($row + 1) / 2);
  for ($i = 1; $i <= $flag; $i++) {
    $startX = $i - 1;
    $startY = $i - 1;
    $width = $col - $i + 1;
    $height = $row - $i + 1;
    // 上
    for ($u = $startY; $u < $width; $u++) {
      $res[$startX][$u] = $start;
      $start += 1;
    }
    // 右
    for ($r = $startX + 1; $r < $height; $r++) {
      $res[$r][$u-1] = $start;
      $start += 1;
    }
    // 下
    for ($d = $u - 1 - 1; $d >= $startY; $d--) {
      $res[$r-1][$d] = $start;
      $start += 1;
    }
    // 左
    for ($l = $r - 1 - 1; $l >= $startX + 1; $l--) {
      $res[$l][$d+1] = $start;
      $start += 1;
    }
  }
  // 输出
  for ($i = 0; $i < $row; $i++) {
    for ($j = 0; $j < $col; $j++) {
      echo $res[$i][$j] . " ";
    }
    echo "<br />";
  }
}
snake(7, 8);

Die zweite Idee

Diese Idee ähnelt der ersten, aber sie durchläuft alles eine Weile und verwendet dann ein Flag-Bit oben rechts unten links, um die aktuelle Richtung zu beurteilen und zu ändern, und verwendet das if in Während ich das Flag-Bit beurteile, werde ich den Code nicht mehr veröffentlichen.

Die dritte Idee

Verwenden Sie einen Iterator, um die Richtung zu steuern, und führen Sie dann m aus * n Schleifen zum Bestimmen von Breite, Höhe und Isset. Um zu bestimmen, ob gedreht werden soll oder nicht, ist die Idee großartig und die Codemenge wird stark reduziert, was darauf hinweist, dass an diese Methode nicht gedacht wurde. .

/* *
 * @param $w : 宽
 * @param $h : 高
 * @param $s : 起始数字
 * @param $x, $y : 起始位置坐标 只能从四顶点开始
 * @param $r :方向 默认顺时间 false为逆时针
 *
 */
function print_matrix($w, $h, $s = 1, $l = 1, $x = 0, $y = 0, $r = true) {
  // 表示四个方向
  $R = array(array(1, 0), array(0, 1), array(-1, 0), array(0, -1));
  !$r && $R = array_reverse($R);
  // 创建一个无限迭代器
  $iterator = new InfiniteIterator(new ArrayIterator($R));
  $iterator->rewind();
  list($_x, $_y) = $iterator->current();
  $result = [];
  $result[$x][$y] = $s;
  for ($i = $s+1; $i < ($s + $w * $h); $i++) {
    $new_x = $x + $_x;
    $new_y = $y + $_y;
    if (0 <= $new_x && 0 <= $new_y && $new_x < $w && $new_y < $h && !isset($result[$new_x][$new_y])) {
      $result[$new_x][$new_y] = $i;
      $x = $new_x;
      $y = $new_y;
    } else {
      $iterator->next();
      list($_x, $_y) = $iterator->current();
      $i--;
    }
  }
  // 打印
  for ($i = 0; $i < $h; $i++) {
    for ($j = 0; $j < $w; $j++) {
      echo $result[$j][$i], "\t";
    }
    echo "<br />";
  }
}

Verwandte Empfehlungen:

So bedienen Sie zweidimensionale Arrays in PHPMatrixTranspose

PHP implementiert das Drucken von Matrix im Uhrzeigersinn ( spiralMatrix) Methodenbeispiel

PHP implementiert die Matrix von a zweidimensionales Array Methoden und Fälle der Transpositionsoperation

Das obige ist der detaillierte Inhalt vonDetaillierte grafische Erklärung zur Implementierung von Schlangenmatrix, Schleifenmatrix und digitaler Spiralmatrix in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn