二次元配列の定義:
それは1が壁を表している迷路を表し、どこへ行くか0の方法は、唯一の横に行くことができますまたは垂直に行くために、横に行くことができない、右下隅に左上から最短ルートを見つけるようにプログラムが必要となります。
INT迷路[5] [5] = {
0、1、0、0、0、
0、1、0、1、0、
0、0、0、0、0、
0、1、1、1、0、
0、0、0、1、0、
}。
それは1が壁を表している迷路を表し、どこへ行くか0の方法は、唯一の横に行くことができますまたは垂直に行くために、横に行くことができない、右下隅に左上から最短ルートを見つけるようにプログラムが必要となります。
入力
迷路を示す5×5の2次元配列。データは独自のソリューションを持っていることを確認してください。
出力
右下の最短経路に左、サンプルに示すようにフォーマット。
サンプル入力
0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0
サンプル出力
(0,0) (1,0) (2,0) (2,1) (2,2) (2,3) (2,4) (3,4) (4,4)
そして、記録パスを出力
コード:
1の#include <stdio.hの> 2の#include < ストリング・H> 3の#include <アルゴリズム> 4の#include <iostreamの> 5の#include <キュー> 6 使って 名前空間STDを、 7 構造体シュウ 8 { 9 int型のY、X、ステップと 10 } STR1、STR2。 11 int型 A、S、D、F、G、Q [ 10 ] [ 10 ]、V [ 10 ] [ 10 ]、W [ 10 ] [ 10 ]、Z [ 25 ]、C [ 25 ]。 12 INTP [ 4 ] [ 2 ] = {{ 1、0 }、{ 0、1 }、{ - 1、0 }、{ 0、 - 1 }}。 13の ボイドBFS() 14 { 15 のint XX、YY、X、Y。 16 キュー<集> R。 17 r.push(0009)。 18 ながら(!r.empty()) 19 { 20 STR1 = r.front()。 21 r.pop()。 22 であれば(str1.y == 4&& str1.x == 4 ) 23 { 24 XX = Q [str1.y] [str1.x]%10 。 25 YY =(Q [str1.y] [str1.x] -XX)/ 10 。 26 一方、(1) // 循环找寻路径ながら 27 { 28 Z [G] = YY; C [G] = XX。 29 gを++ ; 30 であれば(Q [YY] [XX] == 0 ) 31 { 32 ブレーク。 33 } 34 X = Q [YY] [XX]%10 ; // (我々が以前に保持していたので、同様に座標を見つけるために)以前点座標のポイントを見つける 35 Y =(Q [YY] [XX]%100 -X-)/ 10 ; 36 YY = Y; 37 XX = X; 38である } 39 ながら(!r.empty()) 40 r.pop(); 41である 戻り、 42である } 43で str2.step = str1.step + 。1 ; 44である ため(INT I = 0。 I < 4。 ; ++ I) 45 { 46は、 47 str2.y str1.y + P = [I] [ 1 ]; 48 str2.x str1.x + P = [I] [ 0 ]; 49 IF(str2.y < 0 || str2.x < 0 || str2.y> = 5 || str2.x> = 5。)続け、 50 IF(V [str2.y] [str2.x] == 0 && W [str2.y] [str2.x] = = 0 ) 51であり 、{ 52である Q [str2.y] [str2.x] = str1.y * 10 + str1.x; // 一意の値に維持するために、前の点座標にそれを置く 53である W [str2.y] 【str2.x] =。1 ; 54である r.push(STR2); 55 / * 56は、 これに加えて方法、我々はポイントの特殊な記憶構造座標を定義することができる 57である 58 * / 59 } 60 } 61れる } 62れる } 63であり、 INT main()の 64 { 65 G = 0 ; 66 用(INT I = 0 ; I < 5 ; ++ Iに) 67 { 68 のために(INT J = 0 ; J < 5。 ; ++J) 69 { 70 のscanf(" %dの"、&V [I] [J])。 71 } 72 } 73 Q [ 0 ] [ 0 ] = 0 ; 74 str1.x = 0 。 75 str1.y = 0 。 76 str1.step = 0 。 77 [W 0 ] [ 0 ] = 1 ; 78の BFS()。 79 のprintf(" (0、0)\ n " ); 80 のために(INT I = G- 1 ; I> = 0 ; - I) 81 { 82 のprintf(" (%d個、%d)は\ n " 、Z [I]、C [I])。 83 } 84 のprintf(" (4,4)\ n " ); 85 リターン 0 ; 86 }