ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptでスパイラル行列を定義して出力する方法

JavaScriptでスパイラル行列を定義して出力する方法

亚连
亚连オリジナル
2018-06-23 14:23:101343ブラウズ

この記事では、主に JavaScript でスパイラル行列を定義および出力する方法を紹介します。スパイラル行列の概念と原理を簡単に説明し、JavaScript でスパイラル行列を定義および出力するための具体的な操作スキルを例の形式で分析します。参考にしてください

この記事の例では、JavaScriptで螺旋行列を定義して出力する方法を説明します。参考までに共有します。詳細は次のとおりです:

昨夜偶然そのようなアルゴリズムの質問を見て、jsを使用して実装することを考えました。
昨夜急いで書き終えた後、コードが醜くて臭いと感じたので、今夜ゆっくりリファクタリングして、よりエレガントな感じになりました。

スパイラル行列とは

スパイラル行列とは、最初の行から右、下、左、上に向かって番号が大きくなります。

写真に示すように:

達成効果

実装コード

(function() {
  var map = (function() {
    function map(n) {
      this.map = [], this.row = 0, this.col = -1, this.dir = 0, this.n = n;
      // 建立个二维数组
      for (var i = 0; i < this.n; i++) { this.map.push([]); }
      // 定义移动的顺序为 右,下,左,上
      var order = [this.right, this.bottom, this.left, this.up];
      i = 0;
      do {
        // 能移动则更新数字,否则更改方向
        order[this.dir % 4].call(this) ? i++ : this.dir++;
        // 赋值
        this.map[this.row][this.col] = i;
      } while (i < n * n);
    }
    map.prototype = {
      print: function() { for (var i = 0; i < this.n; i++) { console.log(this.map[i].join(&#39; &#39;)) } },
      // 向该方向移动
      left: function() { return this.move(this.row, this.col - 1); },
      right: function() { return this.move(this.row, this.col + 1); },
      up: function() { return this.move(this.row - 1, this.col); },
      bottom: function() { return this.move(this.row + 1, this.col); },
      // 如果坐标在范围内,并且目标没有值,条件满足则更新坐标
      move: function(row, col) {
        return (0 <= row && row < this.n) && (0 <= col && col < this.n) && !this.map[row][col] && (this.row = row, this.col = col, true);
      },
    };
    return map;
  })();
  new map(6).print();
})();

上記は私が皆さんのためにまとめたものです。みんなの役に立ちます将来。

関連記事:

WeChatアプレットを使って画像選択領域のトリミングを実現する方法

vueでのeventbusの詳しい解釈

AngularでのtoDoListの使い方

React Nativeでの使い方Fetch はネットワークリクエストを送信します

vue で他のページの現在のページ共有機能を実装する方法

Vue でオンデマンド読み込みを実装する方法

以上がJavaScriptでスパイラル行列を定義して出力する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。