PHP實現蛇形矩陣,迴環矩陣及數字螺旋矩陣的方法圖文詳解

來源:互聯網
上載者:User
這篇文章主要介紹了PHP實現蛇形矩陣,迴環矩陣及數字螺旋矩陣的方法,結合具體執行個體形式分析了蛇形矩陣,迴環矩陣及數字螺旋矩陣的概念、表示方法及php實現技巧,需要的朋友可以參考下

具體如下:

迴環矩陣指的是一個從一開始,不斷按照上、右、下、左順序依次增大的矩陣序列,例:

1 2 38 9 47 6 5

現在要求:

輸入: m、n,分別代表行數和列數
輸出: m * n 的迴環矩陣

例:

輸入:

7 8

輸出:

1 2 3 4 5 6 7 826 27 28 29 30 31 32 925 44 45 46 47 48 33 1024 43 54 57 56 49 34 1123 42 53 52 51 50 35 1222 41 40 39 38 37 36 1321 20 19 18 17 16 15 14

接下來我們用 PHP 來實現,這裡我們將其封裝成函數調用

第一種思路

直接按照上、右、下、左的順序進行遍曆,計算好遍曆層數就OK了

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);

第二種思路

這種思路與第一種思路類似,不過是通過一個 while 全部遍曆,然後通過一個標誌位 up right down left 來判斷與修改當前方向,通過 while 內的 if 來對標誌位進行判斷,這種就不貼代碼了

第三種思路

使用一個迭代器來控制方向,然後進行 m * n 次迴圈,通過判斷寬高和 isset 來確定是否轉彎,思路很棒,代碼量大大減少,表示沒有想到這種方式。。

/* * * @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怎樣操作二維數組矩陣轉置

PHP實現順時針列印矩陣(螺旋矩陣)的方法樣本

PHP實現二維數組的矩陣轉置操作的方法及案例

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.