Cet article présente principalement la méthode de réalisation de la matrice serpent, de la matrice boucle et de la matrice spirale numérique en PHP. Il analyse les concepts, les méthodes de représentation et les compétences d'implémentation PHP de la matrice serpent, de la matrice boucle et de la matrice spirale numérique sur la base d'exemples spécifiques. dans le besoin peuvent se référer à
pour plus de détails comme suit :
La matrice de boucle fait référence à une séquence matricielle qui commence depuis le début et continue d'augmenter dans l'ordre haut, droite, bas et à gauche. Par exemple :
1 2 3 8 9 4 7 6 5
Nécessite désormais :
Saisie : m, n, représentant respectivement le nombre de lignes et de colonnes
Sortie : m * Matrice de boucle
pour n 🎜>
Ensuite, nous utilisons PHP pour l'implémenter, ici nous l'encapsulons dans un appel de fonction
7 8
La première idée
Traversez directement dans l'ordre haut, droite, bas et gauche, et c'est OK de calculer le nombre de couches traversées1 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
Deuxièmement Cette idée
Cette idée est similaire à la première idée, mais elle traverse tout pendant un certain temps, puis utilise un bit de drapeau en haut à droite en bas à gauche pour juger et modifier la direction actuelle, et à travers le if à l'intérieur du while Pour juger le bit du drapeau, ce code ne sera pas postéLa troisième idée
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);
Utilisez un itérateur pour contrôler la direction, puis effectuez m * n fois une boucle, déterminez s'il faut tourner en jugeant la largeur, la hauteur et l'isset. L'idée est géniale et la quantité de code est considérablement réduite. n'a pas été pensé. .
Recommandations associées :
Comment utiliser la 2D avec PHP Array
Matrix/* * * @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 />"; } }
PHP implémente l'impression dans le sens des aiguilles d'une montre de Matrix( Exemple de méthode Spiral Matrix )
PHP implémente la MatrixMéthodes et cas d'opération de transposition
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!