nはマトリックスの幅です。iとjの入れ子になったループ)で行列を繰り返し処理すれば、上の方法で扱われる配列の対角線を追跡できます。私は、この問題には些細な解決策、ループ用のカップル、ファンキーなカウンターがいくつかあると思いましたが、明らかに複雑です。9次の順序でトラバースする必要があります:[1],[2,4],[3,5,7],[6,8],[9]上の各ストリップは大括弧で囲まれています。要件の1つは、ストリップを区別できることです。あなたが新しいストリップを始めるときにあなたが知っている意味。これは、ストリップ内の各アイテムに対して、次に新しいストリップの開始前に呼び出さなければならない別の機能があるためです。したがって、コードの重複のないソリューションが理想的です。//このアルゴリズムはすべてのサイズの行列に対して機能します。printf("%d\t",arr[j][k]);}キーは、最初の行のすべてのアイテムを反復することです、そして、それから斜めに下がります。次に、最後の列のすべての項目を反復して(前の手順で最初に実行したものを除いて)、次に対角を下ろします。ここでは、行列が正方行列(テストされていない、動作中のPythonコードから翻訳されている)であると仮定するソースコードを示します。12これは基本的に各スライスの長さに関する情報を保持する2つの追加変数(z1とz2)のメモリだけを必要とするので、これを行うには非常にエレガントな方法です。z2各スライスを移動します。その他の情報は、アルゴリズムが開始される場所と、行列がどのように移動するのかに必要な情報です。このパターンはバリバリz1およびz2によって捕捉される。z2によってわかります。++)はz1になります。内部ループの停止基準。jが底に達した後は一定であるという事実から便利に継承される列インデックスのみが残っており、その後に列インデックスが増加し始める。先行アルゴリズムは、左上(0,0)から左から右へ昇順に移動します。このアルゴリズムが必要なときは、左下(m、n)から順に降順で検索する必要がありました。j++)行インデックスはjによって認識されています。jが定数になるときに列インデックスがインクリメントを開始することがわかります。したがって、式の中に再びjを入れることは悪い考えではありません。+1)に等しいことに気付きました。これを他のいくつかのケースでテストしましたが、これはすべてのケースで成立すると確信していました(私は数学者ではありません。P)であり、したがって、左下から始まる降順移動のアルゴリズムは以下のようになる。0;}今、私は他の2つの方向をあなたに任せます^^(注文が実際に重要な場合にのみ重要です)。このアルゴリズムは、たとえそれがどのように動作するかを知っていると思っても、あなたのお尻にあなたを噛ませることができます。それは文字通りあなたが期待しているように行列を動くので、それはかなり美しいと思います。私がここでやったことが実際に意味を成しているのか、もっと良い解決策があるのか​​を誰かが知っていれば興味があります。9そして列を反復するだけです。これは実際に物理的なシフトなしで行うことができます。traversal日本語Top。