PowerPoint プレゼンテーション

Similar documents
PowerPoint Presentation

PowerPoint Presentation

PowerPoint プレゼンテーション

人工知能入門

グラフの探索 JAVA での実装

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - lec06 [互換モード]

Microsoft PowerPoint - 06graph3.ppt [互換モード]

Javaプログラムの実行手順

Java言語 第1回

Microsoft PowerPoint ppt

Microsoft Word - NonGenList.doc

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

memo

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

Microsoft Word - NonGenTree.doc

PowerPoint Presentation

離散数学

PowerPoint Presentation

Microsoft PowerPoint - 06.pptx

IT プロジェクト

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

< F2D B838A835882CC8CF68EAE2E6A7464>

Prog2_12th

プログラミング入門1

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

PowerPoint Template

Microsoft PowerPoint ppt

< F2D834F838C A815B A CC>

DVIOUT-exer

Assignment_.java /////////////////////////////////////////////////////////////////////// // 課題 星の画像がマウスカーソルを追従するコードを作成しなさい 次 ///////////////////

プログラミング基礎I(再)

Java 2 - Lesson01

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

Java言語 第1回

基本情報STEP UP演習Java対策

ガイダンス

基礎計算機演習 実習課題No6

Microsoft PowerPoint - prog12.ppt

目 次 Java GUI 3 1 概要 クラス構成 ソースコード例 課題...7 i

ガイダンス

第2回

GEC-Java

ガイダンス

MISAO with WPF

GUIプログラムⅣ

ガイダンス

情報処理Ⅰ

JavaプログラミングⅠ

GUI プログラミング第 4 Graph ~ 手書認識と関数グラフ描画 ~ マウスで数式を書いて認識し 関数グラフを描画する < 手書認識とグラフ描画のステップ> ステップ 1_1 フレームの作成 ステップ 1_2 マウスで自由に線を書く ステップ 2-1 手書認識認識結果を標準出力する ステップ

デジタル表現論・第4回

プログラミング入門1

設問 println はそこで指定されている内容を出力して改行するものである. 一方,print は内容を出力して改行しないものである. 下記のプログラムそれぞれについて出力結果がどうなるか回答せよ. 下記のプログラム - を実行すると, fms という文字列が 回表示される. プログラム - vo

ガイダンス

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

表示の更新もそういた作業のひとつに当たる スレッドの使用アニメーション アニメーションやシミュレーションなどは画面の更新が一定のタイミングで行われていく この連続した画面の更新をスレッドを利用して行う しかし paint() メソッドを直接呼び出して表示を更新することはできない その理由

Java知識テスト問題

Microsoft PowerPoint - 05.pptx

< F2D82518E9F8AD CC95BD8D7388DA93AE2E6A7464>

2

K227 Java 2


Microsoft PowerPoint prog1_doc2x.pptx

PowerPoint プレゼンテーション

プログラミングI第10回

memo

Microsoft PowerPoint - prog11.ppt

< F2D89BA8EE882C E6A7464>

< F2D F B834E2E6A7464>

Microsoft Word - CompA-Ex doc

問題1 以下に示すプログラムは、次の処理をするプログラムである

HCI プログラミング 5 回目ウィンドウに画像を表示してみよう 今日の講義で学ぶ内容 画像の表示 画像のエフェクト 画像のビューポート指定 画像の表示 1 画像を表示してみましょう 画像の表示はクラス ImageView により管理されます ソースファイル名 :Sample5_1.java //

Safari AppletViewer Web HTML Netscape Web Web 15-1 Applet Web Applet init Web paint Web start Web HTML stop destroy update init Web paint start Web up

memo

r4.dvi

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

alg2015-6r3.ppt

< F2D B825082CC96E291E82E6A7464>

Prog2_9th

Java演習(4) -- 変数と型 --

2

文字列操作と正規表現

データ構造

Prog2_10th

JAVA入門

Prog1_6th

Local variable x y i paint public class Sample extends Applet { public void paint( Graphics gc ) { int x, y;... int i=10 ; while ( i < 100 ) {... i +=

< F2D825282CC947B909482CC A815B83682E6A>

Graphical User Interface 描画する

Microsoft PowerPoint - prog11.ppt

< F2D8EA CE909482CC92EA82852E6A7464>

< F2D82518CC282CC D2E6A7464>

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

awt の主要なクラスを下記に示す クラス Component Container Button Label Panel Frame 説明画面にユーザインターフェイス要素として表示し, ユーザとのやり取りを行うコンポーネントを表すすべてのコンポーネントのスーパークラスになる ほかのコンポーネントを含

Transcription:

L3: Searching programs in Java (AI programming - 1) City connection problem. 探索アルゴリズムの復習 探索で問題解決アルゴリズムの実装 幅優先探索アルゴリズムの説明 課題は深さ優先探索アルゴリズムの実装

The algorithm follows: 1. Create a queue and add the first node to it. 2. Loop: - If the queue is empty, quit. - Remove the first node from the queue. - If the node contains the goal state, then exit with the node as the solution. - For each child of the current node: add the new state to the back of the queue.

どのように実装するか 1. 開始地点を空のキューに加える 2. もしキューが空ならば グラフ内の全てのノードに対して処理が行われたので 探索をやめる 3. ノードをキューの先頭から取り出し 以下の処理を行う ノードがゴールであれば 探索をやめ結果を返す そうでない場合 ノードの子で未探索のものを全てキューに追加する 4. 2 に戻る

The algorithm follows: 1. Create a queue and add the first node to it. 2. Loop: - If the queue is empty, quit. - Remove the first node from the queue. - If the node contains the goal state, then exit with the node as the solution. - For each child of the current node: add the new state to the front of the queue.

どのように実装するか 1. 開始地点を空のスタックに加える 2. もしスタックが空ならば グラフ内の全てのノードに対して処理が行われたので 探索をやめる 3. ノードをスタックの先頭から取り出し 以下の処理を行う ノードがゴールであれば 探索をやめ結果を返す そうでない場合 ノードの子で未探索のものを全てスタックに追加する 4. 2 に戻る

キューとスタック キューとスタックはどちらもデータ構造であり データの挿入と取り出しの順番が異なる キュー : 入れた順に取り出す (FIFO : First In First Out) 3 4 2 2 3 3 4 1 1 1 2 2 3 4 2を追加 3を追加 取り出し 1 4を追加 取り出し 2 取り出し3 取り出し 4 2を追加 3を追加 取り出し 3 4を追加 取り出し 4 取り出し2 取り出し 1 3 4 2 2 2 2 2 1 1 1 1 1 1 1 スタック : 最後に入れたものから順に取り出す (FILO : First In Last Out)

public void breadthfirst() { ArrayList<Node> open = new ArrayList<Node>(); open.add(start); ArrayList<Node> closed = new ArrayList<Node>(); boolean success = false; int step = 0; g.setcolor(color.red); while (true) { System.out.println("STEP:" + (step++)); System.out.println("OPEN:" + open.tostring()); System.out.println("closed:" + closed.tostring()); if (open.size() == 0) {// no more node to be checked success = false; break; else { Node node = open.get(0); open.remove(0); if (node == goal) { success = true; break; else { ArrayList<Node> children = node.getchildren(); closed.add(node); for (int i = 0; i < children.size(); i++) { Node m = children.get(i); if (!open.contains(m) &&!closed.contains(m)) { num++; m.setpointer(node); if (m == goal) { open.add(0, m); node.gethm().get(m).draw(g, num); sleep(); break; else { open.add(m); node.gethm().get(m).draw(g, num); sleep(); // end-of-if // end-of-for // end-of-else // end-of-else // end-of-while if (success) { reset.setvisible(true); String result = printsolution(goal, ""); showdialog(result); // end-of-if // end-of -method 7

宿題 Make your own search program (1) Run in console (2) Run in GUI

// addchild メソッドは単方向に繋げる node[0].addchild(node[1], 50); node[0].addchild(node[2], 90); node[1].addchild(node[2], 30); node[1].addchild(node[6], 150); node[2].addchild(node[3], 90); node[2].addchild(node[6], 80); node[2].addchild(node[7], 100); node[3].addchild(node[4], 100); node[3].addchild(node[7], 90); node[3].addchild(node[8], 140); node[4].addchild(node[8], 130); node[4].addchild(node[9], 90); node[5].addchild(node[1], 50); node[6].addchild(node[5], 70); node[6].addchild(node[7], 40); node[7].addchild(node[8], 100); node[7].addchild(node[9], 80); node[8].addchild(node[9], 60); 9

実行結果の例 in GUI (graphical User Interface)

Node の作成と表示 Node に必要なものを考えてみましょう ( 街の ) 名前 ボタン X 座標 Y 座標 経路情報 隣接する街情報 隣接する街に引く線 Node

// この部分を参考に都市を1つ増やす node = new Node[10]; node[0] = new Node("L.A.Airport", x / 2, 10); node[1] = new Node("UCLA", x / 4, y / 5); node[2] = new Node("Hoolywood", x / 2, y / 5); node[3] = new Node("Anaheim", 3 * x / 4, y * 2 / 5); node[4] = new Node("GrandCanyon", x - 100, y * 3 / 5); node[5] = new Node("SanDiego", 20, y * 2 / 5); node[6] = new Node("Downtown", x / 4, y * 2 / 5); node[7] = new Node("Pasadena", x / 2, y * 3 / 5); node[8] = new Node("DisneyLand", x * 3 / 4, y * 3 / 5); node[9] = new Node("Las Vegas", 3 * x / 4, y * 4 / 5); 12

ノードの追加 node[0].addchild(node[1]); // 1 node[0].addchild(node[2]); // 2 node[1].addchild(node[2]); // node[1].addchild(node[6]); // node[2].addchild(node[3]); // node[2].addchild(node[6]); // node[2].addchild(node[7]); // node[3].addchild(node[4]); // node[3].addchild(node[7]); node[3].addchild(node[8]); node[4].addchild(node[8]); node[4].addchild(node[9]); node[5].addchild(node[1]); node[6].addchild(node[5]); node[6].addchild(node[7]); node[7].addchild(node[8]); node[7].addchild(node[9]); node[8].addchild(node[9]); 親ノード [0]L.A.Airport 1 addchild 2 addchild [1]UCLA [2]Hoolywood 子ノード子ノード

ノードの追加 node[0].addchild(node[1]); // node[0].addchild(node[2]); // node[1].addchild(node[2]); // 3 node[1].addchild(node[6]); // 4 node[2].addchild(node[3]); // node[2].addchild(node[6]); // node[2].addchild(node[7]); // node[3].addchild(node[4]); // node[3].addchild(node[7]); node[3].addchild(node[8]); node[4].addchild(node[8]); node[4].addchild(node[9]); node[5].addchild(node[1]); node[6].addchild(node[5]); node[6].addchild(node[7]); node[7].addchild(node[8]); node[7].addchild(node[9]); node[8].addchild(node[9]); [0]L.A.Airport 親ノード 3 addchild [1]UCLA [2]Hoolywood 子ノード 4 addchild [6]Downtown 子ノード

Node クラス // 都市クラス public class Node extends Button { String name; // 街の名前 private int x, y; // 座標 private int w = 80, h = 20; // 幅と高さ ArrayList<Node> children; // 隣接都市 Node pointer; // 経路 HashMap<Node, Line> hm; // 隣接都市への線 ( 隣接都市 / それを結ぶ線 ) // 街の名前と座標の設定 public Node(String thename, int x, int y) { this.name = thename; children = new ArrayList<Node>(); hm = new HashMap<Node, Line>(); this.x = x; this.y = y; this.setbounds(x, y, w, h); this.setlabel(name); ( 略 ) Button クラスを継承することで Button の機能も使えるようになる コンストラクタの引数で渡された都市名と座標を設定する

Node クラス public int getx() {// ボタンのX 座標を返す return x; public int gety() {// ボタンのY 座標を返す return y; public Node getpointer() {// 前の都市への経路を返す return this.pointer; public void setpointer(node thenode) {// 経路を保存する this.pointer = thenode; public void drawline(graphics g, Node m, int num) {// 線を引く ( 探索時 ) hm.get(m).draw(g, num); public void drawline(graphics g, Node m) {// 線を引く hm.get(m).draw(g); 線を引く時に必要 結果表示の時に必要 Line クラスの draw メソッドを呼び出す 探索時にはチェックした順番も引数に入れる

Node クラス // 隣接都市の追加 public void addchild(node thechild) { children.add(thechild); // 線も生成 hm.put(thechild, new Line(this, thechild)); // 隣接都市への線データをまとめて返す public HashMap<Node, Line> gethm() { return hm; // 隣接都市をまとめて返す public ArrayList<Node> getchildren() { return children; public String tostring() { return name; 引数に指定した都市と現在の都市をつなぎ線を作る このメソッドを書くとコンソールに表示される形式を指定できる

Node の表示 練習 3 ShowNode.java を書き加えていくつかの Node を Applet 上に表示し Node をクリックすると都市名をダイアログで表示するようにしてみましょう

Node の実装答案 :ShowNode.java (+ Node.java, Line.java)

Line クラス private class Line {// 直線クラス ( 略 ) public Line(Node node, Node thechild) { if (node.gety() == thechild.gety()) {// Y 座標が同じ時は横に引く x0 = node.getx() + node.getwidth(); y0 = node.gety() + node.getheight() / 2; x1 = thechild.getx(); y1 = thechild.gety() + thechild.getheight() / 2; else if (node.gety() < thechild.gety()) {// Y 座標が異なるときはキレイになるように場合分け x0 = node.getx() + node.getwidth() / 2; y0 = node.gety() + node.getheight(); x1 = thechild.getx() + thechild.getwidth() / 2; y1 = thechild.gety(); else { x0 = node.getx() + node.getwidth() / 2; y0 = node.gety(); x1 = thechild.getx() + thechild.getwidth() / 2; y1 = thechild.gety() + thechild.getheight(); node1 = node; node2 = thechild;

Line クラス // 描画 public void draw(graphics g) { g.drawline(x0, y0, x1, y1); // 描画 ( 探索時 ) public void draw(graphics g, int num) { g.drawline(x0, y0, x1, y1); g.drawstring("" + num, (x0 + x1) / 2, (y0 + y1) / 2); コンストラクタで指定した座標に線を引く探索時には脇に番号を書く public String tostring() { return node1 + " -> " + node2;

ShowNode.java (1)

ShowNode.java (2) // 各都市の表示 private void shownodes() { // 各 Node を Applet 上に表示し ActionListerner に追加 // 各都市の定義とつながりの設定 private void nodesetting() { // Node を作成するときは引数に都市名 x,y 座標が必要 // ボタンや都市が押された時の処理 public void actionperformed(actionevent e) { // Node 情報をダイアログで表示

部分のコード完全コードは SearchApplet.java に参考する // 各都市の定義とつながりの設定

実行結果の例

実行結果の例

SearchingApplet クラス // メインクラス public class SearchingApplet extends Applet implements ActionListener, ItemListener { ( 略 ) // 初期化メソッド public void init() { // 画面の生成 setsize(x, y); // レイアウトの設定 setlayout(null); // グラフィックスの取得 g = getgraphics(); // 各都市のつながりの定義 makestatespace(); // 各都市の表示 shownodes(); // ボタンなどの表示 showbuttons(); Appletを実行した時に最初に呼び出されるメソッド Nullを指定しないと座標指定のレイアウトができない

SearchingApplet クラス // 各都市の定義とつながりの設定 private void makestatespace() { // この部分を参考に都市を1つ増やす node = new Node[10]; node[0] = new Node("L.A.Airport", x / 2, 10); : : 配列のサイズを超えない程度に自分でいくつかの都市を作成する 座標に x,y を使うと画面サイズを変更した時に対応しやすい // addchildメソッドは単方向に繋げる node[0].addchild(node[1]); : : // なので双方向にするには逆版も node[1].addchild(node[0]); これだけだと 0 1 は行けるが 1 0 は行けないので双方向に繋げたい場合は逆版も

SearchingApplet クラス // 各都市の表示 private void shownodes() { for (int i = 0; i < node.length; i++) { // リスナーへの登録 node[i].addactionlistener(this); // 画面に追加 add(node[i]); Node クラスは Button クラスを継承しているので Button クラスと同じようにリスナーの登録や配置ができる

SearchingApplet クラス // 各都市の表示 private void shownodes() { for (int i = 0; i < node.length; i++) { // リスナーへの登録 node[i].addactionlistener(this); // 画面に追加 add(node[i]); Node クラスは Button クラスを継承しているので Button クラスと同じようにリスナーの登録や配置ができる

SearchingApplet クラス ( 幅優先探索部分 ) // 幅優先探索 public void breadthfirst() { // これからチェックするNodeを保存するリスト ArrayList<Node> open = new ArrayList<Node>(); open.add(start); open に これから調べる都市を追加していく ( キュー ) // チェック済みのNodeを保存するリスト ArrayList<Node> closed = new ArrayList<Node>(); // 目的地に到達できたかどうか boolean success = false; // ステップ数 int step = 0; // 見やすく色変え g.setcolor(color.red); チェック済みの都市を格納する

SearchingApplet クラス ( 幅優先探索部分 ) while (true) { // チェックするNode 数が0 探索失敗 if (open.size() == 0) { success = false; // 失敗 break; // ループを抜ける else { // 先頭を取り出してチェックを始める Node node = open.get(0); // 取り出したら もうチェックしないので外す open.remove(0); // 取り出したのが目的地だったら if (node == goal) { success = true; // 成功 break; // ループを抜ける // 目的地でない場合 Open=0 ということは 全ての都市を調べ終えたか 今の都市が他の都市とつながっていないということ 探索開始

SearchingApplet クラス ( 幅優先探索部分 ) else { // 取り出した都市に繋がっている都市のリストを取り出す ArrayList<Node> children = node.getchildren(); // 取り出した都市はもう用済み closed.add(node); // 繋がっている都市を 1 つづつ取り出す for (int i = 0; i < children.size(); i++) { // リストから順番に取り出す Node m = children.get(i); // これからチェックするリスト もうチェックしたリストにも入っていない if (!open.contains(m) &&!closed.contains(m)) { num++; // ポインターをセット m.setpointer(node); // 取り出したのが目的地なら if (m == goal) { こうすることで同じ都市を複数回チェックするミスをなくせる 子ノード 親ノードにポインターセット

SearchingApplet クラス ( 幅優先探索部分 ) // これからチェックするリストの先頭に入れる // これにより次回は目的地がチェックされる // 線を引く コメントに沿って実装してみましょう // 見やすいように小休止 // 目的地が見つかればこれ以上のチェックは不要 // そうでないとき else { // これからチェックするリストに入れる // 線を引く // 見やすいように小休止

動作例 ( 幅優先探索 ) ノード 0 [0]L.A.Airport START=L.A.Airport GOAL=GrandCyanon STEP:0 ノード 1 [1]UCLA ノード 2 [2]Hollywood Open={L.A.Airport Closed={ ノード 3 [3]Anaheim ノード 4 [4]GrandCyanon Open はこれから調べる Node Close は調べ終わった Node

動作例 ( 幅優先探索 ) ノード 0 [0]L.A.Airport START=L.A.Airport GOAL=GrandCyanon STEP:1 ノード 1 [1]UCLA ノード 2 [2]Hollywood Open={UCLA,Hollywood Closed={L.A.Airport ノード 3 [3]Anaheim ノード 4 [4]GrandCyanon L.A.Airport は調べ終わったので close に追加し L.A.Airport の子ノードである UCLA と Hollywood を open に追加

動作例 ( 幅優先探索 ) ノード 0 [0]L.A.Airport START=L.A.Airport GOAL=GrandCyanon STEP:2 ノード 1 [1]UCLA ノード 2 [2]Hollywood Open={Hollywood,Anaheim Closed={L.A.Airport,UCLA ノード 3 [3]Anaheim ノード 4 [4]GrandCyanon UCLA は調べ終わったので close に追加し UCLA の子ノードである Anaheim を open に追加 Hollywod は既に open に追加してあるので無視

動作例 ( 幅優先探索 ) ノード 0 [0]L.A.Airport START=L.A.Airport GOAL=GrandCyanon STEP:3 ノード1 [1]UCLA ノード3 [3]Anaheim ノード2 [2]Hollywood ノード4 [4]GrandCyanon Open={Anaheim Closed={L.A.Airport,UCLA,H ollywood Hollywood は調べ終わったので close に追加する Hollywood の子ノードである UCLA は既に open に追加してあるので無視

動作例 ( 幅優先探索 ) ノード 0 [0]L.A.Airport START=L.A.Airport GOAL=GrandCyanon STEP:4 ノード1 [1]UCLA ノード3 [3]Anaheim ノード2 [2]Hollywood ノード4 [4]GrandCyanon Open={GrandCyanon Closed={L.A.Airport,UCLA,H ollywood,anaheim Anaheim は調べ終わったので close に追加し 子ノードである GrandCyanon を open に追加する GOAL が見つかったので終了

動作例 ( 深さ優先探索 ) ノード 0 [0]L.A.Airport START=L.A.Airport GOAL=GrandCyanon STEP:0 ノード 1 [1]UCLA ノード 2 [2]Hollywood Open={L.A.Airport Closed={ ノード 3 [3]Anaheim ノード 4 [4]GrandCyanon Open はこれから調べる Node Close は調べ終わった Node

動作例 ( 深さ優先探索 ) ノード 0 [0]L.A.Airport START=L.A.Airport GOAL=GrandCyanon STEP:1 ノード 1 [1]UCLA ノード 2 [2]Hollywood Open={UCLA,Hollywood Closed={L.A.Airport ノード 3 [3]Anaheim ノード 4 [4]GrandCyanon L.A.Airport は調べ終わったので close に追加し L.A.Airport の子ノードである UCLA と Hollywood を open に追加

動作例 ( 深さ優先探索 ) ノード 0 [0]L.A.Airport START=L.A.Airport GOAL=GrandCyanon STEP:2 ノード 1 [1]UCLA ノード 2 [2]Hollywood Open={Anaheim,Hollywood Closed={L.A.Airport,UCLA ノード 3 [3]Anaheim ノード 4 [4]GrandCyanon UCLA は調べ終わったので close に追加し UCLA の子ノードである Anaheim を open の先頭に追加 Hollywod は既に open に追加してあるので無視

動作例 ( 深さ優先探索 ) ノード 0 [0]L.A.Airport START=L.A.Airport GOAL=GrandCyanon STEP:3 ノード1 [1]UCLA ノード3 [3]Anaheim ノード2 [2]Hollywood ノード4 [4]GrandCyanon Open={GrandCyanon,Hollywo od Closed={L.A.Airport,UCLA,An aheim Anaheim は調べ終わったので close に追加する Anaheim の子ノードである GrandCyanon を open の先頭に追加する GOAL が見つかったので終了

練習 1 ArrayTest.java のコメントを見ながらコードを書き加え 正しく実行できるようにしてみましょう (add 全消去 button function) 実行例

練習 2 HashMapTest.java のコメントを見ながらコードを書き加え 正しく実行できるようにしてみましょう (Add 要素の位置の表示 )

宿題 SearchingApplet.java (L3-toStudent.zip) をダウンロードして やってみましょう 特に 以下関連のソースコードを理解してください 1. Applet 上に複数の都市を表示する 2. 幅優先探索を実装する しなさい : 深さ優先探索を実装する ( 都市名 (node names) と都市数 (node number) can be changed to what you like). ほかの探索方法と応用例を考えてください 参考サイト http://el-tramo.be/jsearchdemo/