1

emu8086 を使用してアセンブリ プログラムに取り組んでいます。このプログラムは、組み込みのロボット デバイスを使用して、シミュレートされた 6x9 マップ上で仮想ロボットをエミュレートします。マップには未知数の壁とランプ (点灯/消灯) が含まれており、ロボットはマップを横断し、点灯していないすべてのランプを見つけて点灯させます。ロボット自体は、ロボットが向いている隣接する正方形からのみデータを取得でき、90 度回転することもできます。このプロジェクトは、左上隅が座標系 (0,0) の原点になることを示唆しています。

http://www.emu8086.com/assembler_tutorial/robot.gif

ロボットを自分のコードに接続してデータを移動および検査する方法は理解していますが、無限ループや行き止まりに陥ることなく、マップ全体を効率的に移動してすべてのランプを確認する方法がわかりません。

幅優先検索アルゴリズムや深さ優先検索アルゴリズムなど、いくつかの検索アルゴリズムの使用について読んだことがありますが、そのような概念をアセンブリに実装する方法がわかりません (ほとんどの例/擬似コードは c++/c#/etc で記述されているため)。 )。

特定のコーディングを求めているわけではありませんが、これらの検索機能を実装する方法についての洞察を求めています。問題は座標系の原点に言及しているため、特定の座標でオブジェクトの値を取得する 2 次元配列を作成しました。問題にとって配列がどれほど重要かはわかりませんが、助けていただければ幸いです。

4

1 に答える 1

0
  1. 発見したタイルをunvisitedNodesリストに配置します (今のところ開始タイルです)。
  2. unvisitedNodesからタイルを取得して調べます。
  3. 調べた後、タイルを unvisitedNodes から VisitedNodes リストに移動ます
  4. タイルを調べるときは、隣接する各タイルがリストの 1 つに含まれているかどうかを確認してください。
  5. そうでない場合、問題の隣人は新しい発見です。unvisitedNodesリストに追加します。
  6. unvisitedNodesが空になるまでポイント2から繰り返します

このために、最初に素敵な小さなコレクション(リスト/キュー/セット) ライブラリを作成することをお勧めします。

于 2013-04-14T11:10:22.700 に答える