以下の問題は,全て結合して1個のプログラムになることを想定している. これは迷路(ただし,右 か 下 にしか進まない)を解くプログラムである. - (問題1) 以下のプログラムを記述せよ. プログラムの先頭近辺(#includeの直後)に以下を記述せよ. #define W 8 #define H 6 main()関数の中のローカル変数として,以下を宣言,初期化を記述せよ. char map[H][W]={ {1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,1}, {1,0,1,1,1,0,1,1}, {1,0,0,0,0,1,0,1}, {1,0,0,1,0,0,2,1}, {1,1,1,1,1,1,1,1}, }; 上記の データ(map)を, 以下の様に 横 W マス,縦 H マスの長方形型に表示せよ. 表示のための printf は main 関数の中に記述せよ. ######## # # # ### ## # # # # # G# ######## ただし,map[y][x] のデータは,長方形の横座標x,縦座標y に対応する. 横座標は 最左列が 0 で,右に行くにつれて横座標は増加していく. 縦座標は 最上段が 0 で,下に行くにつれて縦座標は増加していく. G のマークは 横座標 6, 縦座標 4 である. 配列 map の対応する値が 0 であれば その場所には空白を表示し, 値が 1 であれば # を表示し,値が 2 であれば G を表示する. (表示は 全角でも半角でも構わない) 0:空白 は通れる場所を,1:# は通れない場所を,2:G は ゴールを意味している. - (問題2) 以下のプログラムを記述せよ. 上記の(問題1)の char map[H][W]={ ... }; グローバル変数にせよ. そして,横 W マス,縦 H マスの長方形型に表示する関数 void print_map() を作成し, main()関数 より,呼び出しをせよ. 当然,表示のための printf は print_map 関数の中に記述せよ. print_map の中では,配列変数 map を使用できることに注意せよ. - (問題3) 以下の 関数を作成せよ. 名前が maze0 で,引数が int x, int y, int depth で,戻り値が void で, 呼び出されると,以下の様に表示する関数. map[y][x] が 0 であれば, 空白をdepth*2個 ( x座標, y座標) 改行 map[y][x] が 1 であれば, 空白をdepth*2個 ( x座標, y座標) X 改行 map[y][x] が 2 であれば, 空白をdepth*2個 ( x座標, y座標) OK 改行 例: x=2, y=1, depth=1 なら " (2,1)\n"を表示. x=2, y=2, depth=2 なら " (2,2)X\n"を表示. そして,その maze0 関数を main より呼び出せ. x, y, は自分で決めて良い. depth の値は何でもよい.たとえば 3 とせよ. - (問題4) 以下の 関数を作成せよ. この関数は,迷路の(x,y)の状況を調べ, そこが通れる場所であった場合は そのマスの右と,下も調べる関数である. 名前が maze1 で,引数が int x, int y, int depth で,戻り値が void で, 呼び出されると,以下の様に動作する関数を作成せよ. map[y][x] が 0 であれば, ・"空白をdepth*2個 ( x座標, y座標) 改行"を表示する. ・このマスの右のマスに対して maze1 を呼び出し,右のマスも調べる.  ただし,depth を1増やして呼び出す.  (つまり, maze1( x+1, y, depth+1) を呼び出す. ・このマスの下のマスに対して maze1 を呼び出し,下のマスも調べる. map[y][x] が 1 であれば, ・"空白をdepth*2個 ( x座標, y座標)X 改行"を表示する. map[y][x] が 2 であれば, ・"空白をdepth*2個 ( x座標, y座標) OK 改行"を表示する. ・exit(0)を呼び出し,プログラムを終了. そして,この maze1 関数を main より呼び出せ. ただし,迷路のスタートは (1,1)として,そこから調査を開始する. また,最初の depth は 0 とすれば良い.(他の値でも構わない) つまり maze1( 1,1,0) を呼び出す. また,exit() を用いるために, プログラムの先頭近辺(#includeの直後)に #include を以下を記述せよ. - (問題5) 迷路を自作し,このプログラムに解かせよ. ただし,このプログラムは右と下にしか 調査を広げない (右と下にしか移動しない)ので注意せよ. - (問題6) 作成したプログラムが,どのような順で迷路を探索しているのかを説明せよ. - (問題7) 上記の(問題4)を上下左右調べて移動する様にすると,どのような問題が生じるか説明せよ. できれば,その回避方法,解決方法を考えて記述せよ.