3次元配列の検索が広くなります
する#include <STDLIB.H> する#include < 文字列・H> の#include <stdio.hに> のconst int型 MAXN = 50 ; int型C、K、H; CHARミリアンペア[MAXN] [MAXN] [MAXN]; // 三次元の定義LWHアレイ INT ;ログイン[MAXN] [MAXN] [MAXN] // タグ配列 構造体ノード{ int型 C、K、H; // 構造は、長い記録幅h高k C点に達する のint工程; // 移動するステップ数 }; 構造体ノードT [ 33433 ]; // 構造キュー 構造体ノードP、Q、W、L、 INTは F [] [3 ] = { 0、0、1、0、0 - 1、0、1、0、0 - 1、0、1、0、0 - 1、0、0 }; // フロント上下左右移動二階含む6つの方向 空隙BFSを(){ 訪問[PC] [PK] [てpH] = 1 ; // タグがなくなった INTフロント= 0、REAR = 0 。 T [リア++] = P; // エンキュー しばらく {(=前後!)// キューが空でない場合場合 W = T [フロント++ ]; IF(QC && w.k WC == == == QH QK && W.H ){ // エンドポイントを直接出力する場合 のprintf(" \ N-%のD(Sにおいて分エスケープ)" 、w.step); 返す; } ため(int型 I = 0 ;私は< 6。 ; Iは++){ // そうでない場合は、トラバース6つの方向 L = W; LC + = F [I] [ 0 ]; LK + = F [I] [ ]。1 LH + = F [I] [ 2 ]; IF(LC> = 0 && L.C. <&& l.k C> = 0 && l.k <&& l.h K> = 0 && l.h <H &&ミリアンペア[LC] [LK] [ !LH] = ' #' &&訪問[LC] [LK] [LH] == 0){ // 条件の場合 l.step ++; // ステップ数が増加 訪問[LC] [LK] [LH] = 1 ; / / 訪問マーキング T [REAR ++] = Lを; // キューに入れ } } } のprintf(" 閉じ込められました!\ N "); //そうでなければ、出力は到達できない } int型のmain(){ memsetの(T、0、はsizeof(構造体 ;ノード)) // 空に しばらく(〜scanfの(" %D%D%D " {&C&K、&H))を// C kの長い幅h高い IF(Cの== 0 &&のk == 0 &&時間== 0)BREAK ; のため(int型 I = 0 ;私はCを<; I ++は){ ため(INT J = 0 ; J <K。 ++ J ){ scanfの("Sの%」、ミリアンペア[I] [J]); // 文字列の入力 のための(INT W = 0 ; W <H、W ++ ){ IF(ミリアンペア[I] [J] [W] == ' S '){ // 記録開始点 PC = I; PK = J; てpH = W; p.step = 0 ; } そう IF(ミリアンペア[I] [J] [W] == ' E '){ // レコード端 = QC I; QK = J; QH = W; } } } } のmemset(訪問、0、はsizeof(訪問)); // クリアタグアレイ BFS(); // 全体の検索 } 戻り 0 ; }