[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を持ち、行列内のランダムな位置に値を加え続ける関数が必要です。周囲の位置はヒートマップのようにゼロに達するまで半径方向に低い値を追加する必要があります。 –
ここに表示される値を使用してください。それはどれほど難しいでしょうか?値を計算する必要はありません。それらを配列に入れ、大きな配列にコピーします。 –