質問
私はをJavaクラスのためのの割り当てに働いていると私は、この問題を解決する方法がわかりませんよ。私はそれが私のために完了したくないが、私は正しい方向に始めます。私はプログラムの再帰部分のほとんどがわかりませんよ。私は、プログラミングが得意ではないんです。
問題:
東北パスはから得られます 上に移動することにより、二次元グリッドと 右。例えば、図の 以下、1,0からの二つの経路があります 0,1。最初は、(1,0)、(0,0)、(0,1)であります 第二は、(1,0)、(1,1)、(0,1)です。 何の北東のパスが存在しないことに注意してください (0,1)から他のポイントへ。さらに 1つの北東の経路があることに注意してください (1,1)から(0,1)へ。あなたは書くことがあります の数(大きさを取るプログラム グリッド - 10より大きくない)と 開始位置と終了 場所と再帰的には、すべての計算します "北東" のパスます。
0,0 0,1
1,0 1,1
私は、ファイルprog2.datに読んでいる。
まず、次いでグリッドサイズで開始座標、次いで仕上げ座標を読み取ります。例えばます:
5
3 0
1 3
これは、1つのファイルにする必要があるので、私はメソッドを使用するつもりです。誰かが私を起動または既に掲載同様の質問に私を直接得ることができれば、私はそれをお願い申し上げます。
解決
一つの解決策は、あなたの目的地に最も近いを取得するパス上の次のポイントを見つけることが含まれます。あなたはその点を持っていたら、その後、その次の最も近い点を把握するために、同じ方法を使用して。あなたがあなたの目的地に到着したときに、このプロセス(または再帰)が終了します。
あなたはこのような何かをやって試すことができます:
void getNextPoint(Point start, Point end, Path currentPath) {
//if start == end, then you're done with the recursion
//and you have a valid path
//if you can move east from start to get closer to end
//Point next = east of start
//append next to the currentPath
//then call getNextPoint(next, end, currentPath)
//if you can move north from start to get closer to end
//Point next = north of start
//append next to currentPath
//then call getNextPoint(next, end, currentPath)
}
あなた自身のためのより多くを把握することができますので、私は多くの詳細を省略しましたが、それは再帰を使用するための一つのアプローチです。基本的に、あなたがパスを構築しています。あなたのパスを管理する方法を理解する必要がありますが、チャンスはあなたがそれらのオフポイントをプッシュしてポップすることができるようにする必要がありますされます。
他のヒント
これが役立つことがあります:
パスカルの三角形を読んで起動します。
所定の開始位置(X0、Y0)、及び所定の終了位置(X1、Y1)、及びグリッドを北または東移動に自分自身を制限するため、最小の長さのパスを正確に(X1-X0からなるであろういくつかの順序で)東へのステップと北へ(Y1-Y0)のステップ、。