T(x、y)を、次のようなX×Yグリッド上のツアーの数とします。
- ツアーは左上の広場から始まります
- ツアーは、1マス上、下、左、または右の動きで構成されます
- ツアーは各広場を1回だけ訪問し、
- ツアーは左下の四角で終わります。
たとえば、T(2,2)= 1、T(3,3)= 2、T(4,3)= 0、およびT(3,4)=4であることが簡単にわかります。 T(10,4)を計算します。
私はこれに何時間も取り組んできました...グリッドの寸法を入力として受け取り、可能なツアーの数を返すプログラムが必要ですか?
私はこれに何時間も取り組んできました...グリッドの寸法を入力として受け取り、可能なツアーの数を返すプログラムが必要ですか?
私は問題を解決するためにこのコードを書きました...私はすべての方向をチェックする方法を理解できないようです。
#include <iostream>
int grid[3][3];
int c = 0;
int main(){
solve (0, 0, 9);
}
int solve (int posx, int posy, steps_left){
if (grid[posx][posy] = 1){
return 0;
}
if (steps_left = 1 && posx = 0 && posy = 2){
c = c+1;
return 0;
}
grid[posx][posy] = 1;
// for all possible directions
{
solve (posx_next, posy_next, steps_left-1)
}
grid[posx][posy] = 0;
}
@KarolyHorvathによるアルゴリズムグリッド上のセルの状態(訪問済み/未訪問)を表すために、いくつかのデータ構造が必要です。
あなたのアルゴリズム:
step(posx, posy, steps_left)
if it is not a valid position, or already visited
return
if it's the last step and you are at the target cell
you've found a solution, increment counter
return
mark cell as visited
for each possible direction:
step(posx_next, posy_next, steps_left-1)
mark cell as not visited
step(0、0、sizex * sizey)で実行します