2016-05-21 13 views
-1

私は大学のコンピュータCプログラミングコースのイントロで、私たちは迷路解決課題を行うように求められます。私は迷路への到達可能性と解決策を見つけるためにこのコードを書いています。すべての迷路要素を含む構造Mを渡してから、再帰を使って迷路を検索します。私自身の中で関数を呼び出すと、引数をassign_reachability(&M)として渡そうとするとエラーが発生するので、どの引数を渡すべきか分かりません。提案や助けがあれば、それを感謝します。再帰(迷路解決)を介して構造体へのポインタを渡す

おかげ

int 
assign_reachability(maze_t *M){ 

    int x, y; 

    x = M->XP; 
    y = M->YP; 

    if(M->maze[y][x].exit==EXIT){ 
     return 1; 
    } 
    if(M->maze[y][x].type==NOGO || M->maze[y][x].visit==VISIT){ 
     return 0; 
    } 
    M->maze[y][x].visit = VISIT; 
    /* check not on top row */ 
    if(y!=0){ 
     M->YP = (y-1); 
     if(assign_reachability(&M)) 
      M->maze[y][x].reach=REACHABLE; 
     return 1; 
    } 
    /* check not on bottom row */ 
    if(y!=((M->nrows)-1)){ 
     M->YP = (y+1); 
     if(assign_reachability(&M)) 
      M->maze[y][x].reach=REACHABLE; 
     return 1; 
    } 
    /* check not on left side */ 
    if(x!=0){ 
     M->XP = (x-1); 
     if(assign_reachability(&M)) 
      M->maze[y][x].reach=REACHABLE; 
     return 1; 
    } 
    /* check not on right side */ 
    if(x!=((M->ncolumns)-1)){ 
     M->XP = (x+1); 
     if(assign_reachability(&M)) 
      M->maze[y][x].reach=REACHABLE; 
     return 1; 
    } 
    return 0; 
} 
+0

'M->迷路[Y] [X]へのポインタです。 reach == REACHABLE; '間違っています(効果なし) – BLUEPIXY

+0

これはおかげさまです! @BLUEPIXY –

+0

あなたのコンパイラはおそらく、役に立たない声明が何の効果もないとあなたに言ったかもしれません。残念なことに、Cコンパイラはデフォルトでは警告の数を多くすることはできません。 – Kaz

答えて

0

私は assign_reachability(&M)

として引数を渡すしようとすると、&Mのタイプはすなわちmaze_tへのポインタのアドレス、maze_t**でエラーを取得しておきます。関数は、引数の型maze_t*であることを期待し、あなたはそれが好きで渡す必要があります。M以来

assign_reachability(M)

が既にmaze_t

+0

それはうまくいった。助けてくれてありがとう、本当に感謝しています。 –

1

あなたはint秒戻ってきているが、関数の戻り値の型はvoidです。

+0

ええ、私はそれを変更する前にコードをコピーする必要があります申し訳ありません。ちょうど質問のおかげでそれを修正しました。 –

関連する問題