これはこれを行う方法の1つです。 SASデータステップロジックを使用してより一般化された迷路解決アルゴリズムを書くことは、読者の練習として残されていますが、これはラビリンスにとっては有効です。
/* Define the format */
proc format;
value $direction
'D' = 'down'
'L' = 'left'
'R' = 'right'
'U' = 'up'
;
run;
data want;
/*Read in the maze and start/end points in (y,x) orientation*/
array maze(6,7) (
1,1,1,1,1,1,1,
1,0,0,1,1,1,1,
1,1,0,1,1,0,1,
1,1,0,1,0,0,1,
1,1,0,0,0,1,1,
1,1,1,1,1,1,1
);
array endpoints (2,2) (
2,2
3,6
);
/*Load the start point and output a row*/
x = endpoints(1,2);
y = endpoints(1,1);
output;
/*
Navigate through the maze.
Assume for the sake of simplicity that it is really more of a labyrinth,
i.e. there is only ever one valid direction in which to move,
other than the direction you just came from,
and that the end point is reachable
*/
do _n_ = 1 by 1 until(x = endpoints(2,2) and y = endpoints(2,1));
if maze(y-1,x) = 0 and direction ne 'D' then do;
direction = 'U';
y + -1;
end;
else if maze(y+1,x) = 0 and direction ne 'U' then do;
direction = 'D';
y + 1;
end;
else if maze(y,x-1) = 0 and direction ne 'R' then do;
direction = 'L';
x + -1;
end;
else if maze(y,x+1) = 0 and direction ne 'L' then do;
direction = 'R';
x + 1;
end;
output;
if _n_ > 15 then stop; /*Set a step limit in case something goes wrong*/
end;
format direction $direction.;
drop maze: endpoints:;
run;
アレイで何をしようとしているかを詳しく説明し、配列ステートメントのドキュメントをご覧ください。 – user667489
は、与えられた入力セットから期待される出力をどのように表示するかの例を示します。それはあなたが探しているものを提供したものから明らかではない – DCR
"迷路ファイル"は1が壁で、0は可動スペースである迷路ですか? (そうであれば、あなたは斜めに動かない限りあなたの例は解決できません)。出力として何をしたいですか?開始から終了までのパスのリスト?希望の出力データセットを表示してください。 – Quentin