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
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!