Maison > développement back-end > tutoriel php > Explication graphique détaillée de la façon d'implémenter la matrice serpent, la matrice boucle et la matrice spirale numérique en PHP

Explication graphique détaillée de la façon d'implémenter la matrice serpent, la matrice boucle et la matrice spirale numérique en PHP

墨辰丷
Libérer: 2023-03-27 10:56:02
original
1512 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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ées

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
Copier après la connexion

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);
Copier après la connexion

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 />";
  }
}
Copier après la connexion
Transpose

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal