2017-11-05 3 views
-5

matrix私は奇数の行と列を持ち、すべての位置は0(ゼロ)の値を持っています。matrixの中心位置にX値(たとえば16)を追加し、他の位置をY値は(例えば3つ)であるが、radialの方法で、それらの位置がゼロになるまで。私が作成したこの画像のように マトリックスに値を追加して放射状に減少させる方法は?

は(私はちょうどより良く理解するために色を追加しました):

enter image description here

私は行列で動作するように始めている、私は非常に役立ちませんが、何もでき似た何かのためにウェブを検索しました理解できる。それはどうやって行えるの?これを行うにはいくつかのfor-loopのトリックがありますか?誰もが前に試したことがありますか?誰かが助けてくれたら、私は感謝します。

+0

何か問題がありますか?これらの数を持つ配列を作ることができます。あるいは、任意のサイズの行列を作成したいでしょうか?この場合、問題のルールは何か。 –

+0

申し訳ありませんが、私はよく説明していないと思います。行列はすべての初期値= 0を持ち、行列内のランダムな位置に値を加え続ける関数が必要です。周囲の位置はヒートマップのようにゼロに達するまで半径方向に低い値を追加する必要があります。 –

+0

ここに表示される値を使用してください。それはどれほど難しいでしょうか?値を計算する必要はありません。それらを配列に入れ、大きな配列にコピーします。 –

答えて

1

[EDIT]

ですから、私はこの解決策を考えて編集しているに基づきます。プログラミング言語を指定していないので、私はいくつかのcのような関数型プログラミングを使用します。必要に応じてオブジェクト指向に変換する作業を任せます。

入力:[0,0] Mで始まり、Mで終わる

  • グローバルmaxtrix [100,000、100,000](私はチェックしたい、それが簡単に理解できるようにすること、それを注意してください私はボードに達した場合、あなたは軸に沿ってのための()5,5あなたの例では
  • Nと呼ばれる第一の数()16あなたの例では
  • デクリメント最初の数(X、Y)用)

  • 位置を確認する必要がありますD(あなたの例3では)

    main(){ 
        computeValues(M, X, Y, N, D) 
    } 
    
    computeValues(M, X, Y, N, D){ 
        M[X,Y] = N 
        if(N-D <= 0) return; 
        if(M[X,Y-1] == 0){ 
         computeValues(M, X, Y-1, N-D, D) 
        } 
        if(M[X,Y+1] == 0){ 
         computeValues(M, X, Y+1, N-D, D) 
        } 
        if(M[X-1,Y] == 0){ 
         computeValues(M, X-1, Y, N-D, D) 
        } 
        if(M[X+1,Y] == 0){ 
         computeValues(M, X+1, Y, N-D, D) 
        } 
    } 
    

N-D <= 0コントロールで0になると、この機能は終了します。位置番号をreciveたら、それはまだ評価されていないに近い位置をチェックし、それらを割り当てるN-D数は、N-D <= 0が近い位置をチェックし続ける場合は、新しいポジションが評価されていないというように...

重要な注意:この関数あなたはあなたが投稿した画像からは少し異なっているあなたの答えのテキストに尋ねて(あなたの例では例M[4,4] 11であるが、それは10であるべきとM[5,0]はする必要があります1)行列を返す


旧回答

これはあまり難しくありません。あなたが言うことを忘れた唯一の事柄は、価値による価値の計算方法です。

このアルゴリズムを実現するには、正しい値を得るためにルールを知っていなければなりません。

の例では、私のポイントをより明確にします

Y 
Y X Y 
    Y 

場合はX = 17 Yは、例えば、15または14である必要があれば、我々は知っていますか?

[編集していただければこれらの情報を正しく回答しようとしています]

+0

私はいくつかの 'for-loop'sを使ってこれを解決する方法を考えていましたが、非常にコンパクトで素晴らしい方法を見つけました。今度はそれをDelphiに翻訳し、NとDの値に応じて以前のサイズの行列を作成し、それらを主行列に追加します。ありがとう、おめでとう。 –

+0

私は助けることができてうれしいです。あなたの仕事に幸運;) –

関連する問題