スタッフBLOG

経路探索52015年11月10日

チューターの田村です。

長々とやっていますが、相変わらず経路探索の続きです。

 

前回

 

for (int i = 0; i < 5; i++) {

    for (int j = 0; j < 5; j++) {

        if (num[i][j] == 0) {

            (num == 0の時に実行したい文)

        }

    }

}

 

まで作りました。

これは、num == 0(キャラクターのいる位置)を見つけたところです。

(num == 0の時に実行したい文)で、num == 0の上下左右にnum = 1を代入していきます。ただし、水たまりの時は何もしません。

上のマスでの操作を考えると

 

if (mizutamari[i-1][j] == false) {

    num[i-1][j] = 1;

}

 

となります。

mizutamari[i-1][j] == false(上のマスが水たまりでない)とき、num = 1を代入しています。

このままだと、もしi == 0だったとき、i-1が添え字の範囲外となってエラーが発生するのでちょっと工夫しなければいけないのですが、今回は無視します。

[i-1][j]を[i][j-1],[i][j+1],[i+1][j]に変えれば、それぞれ左右下のマスでの操作になるので、これを並べて書けば(num == 0の時に実行したい文)が完成します。

 

次は、num == 1のマスで行えばいいのですが、それはnum == 0の時とほとんど同じ操作になります。同じ操作を繰り返すときはfor文を使うと楽です。

 

for (int m = 0; m < 2; m++) {

    for (int i = 0; i < 5; i++) {

        for (int j = 0; j < 5; j++) {

            if (num[i][j] == m) {

                (num == mの時に実行したい文)

            }

        }

    }

}

 

最初にfor文を付け加えて、if (num[i][j] == 0)の0をmに変えました。

(num == mの時に実行したい文)は

 

num[i-1][j] = 1;

 

などを

 

num[i-1][j] = m+1;

 

に変えれば良いです。

これで、m == 0の時、m == 1の時を順番に実行してくれます。

 

あとはnum >=0のマスを移動可能と判定してくれるプログラムを書けば、経路探索のプログラムは完成です。