アルゴリズムとデータ構造 補足資料 10-1 「騎士巡回」

Preview:

DESCRIPTION

アルゴリズムとデータ構造 補足資料 10-1 「騎士巡回」. 横浜国立大学 理工 学部 数物・電子情報系学科 富井尚志. バックトラックアルゴリズム. とりあえずやってみる ダメ なら戻って別の道を探る あの とき別の道を選んでいたら 、、、 試行錯誤( trial and error ) 結局全部のケースをやってみる(完全解). 騎士巡回( knight tour ). チェスの「ナイト」. 騎士巡回( knight tour ). チェスの「ナイト」 、盤面のすべてのマスを                    一度だけ訪問する. - PowerPoint PPT Presentation

Citation preview

アルゴリズムとデータ構造補足資料 10-1「騎士巡回」

横浜国立大学理工学部

数物・電子情報系学科富井尚志

バックトラックアルゴリズム• とりあえずやってみる• ダメなら戻って別の道を探る– あのとき別の道を選んでいたら、、、

• 試行錯誤( trial and error )

– 結局全部のケースをやってみる(完全解)

騎士巡回( knight tour )• チェスの「ナイト」

騎士巡回( knight tour )• チェスの「ナイト」、盤面のすべてのマス

を                   一

度だけ訪問する

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

騎士巡回( knight tour )

スタート !

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1

2

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1

2

3

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1

2

3

4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1

2

3

5

4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1

6 2

3

5

4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1

6 2

7 3

5

4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 8

6 2

7 3

5

4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 8

6 9 2

7 3

5

4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 8

6 9 2

7 3

10 5

4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 8

6 9 2

7 3

10 5

11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 8

6 9 2

7 3

10 5 12

11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 8

6 9 2 13

7 3

10 5 12

11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 8

6 9 2 13

7 3

10 5 12

11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 8

6 9 2 13

15 7 3

10 5 12

11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 8

6 9 2 13

15 7 3

10 5 12

16 11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 8

6 9 2 13

15 7 3

10 5 17 12

16 11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 8

6 9 2 13 18

15 7 3

10 5 17 12

16 11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 19 8

6 9 2 13 18

15 7 3

10 5 17 12

16 11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 19 8

6 9 2 13 18

15 20 7 3

10 5 17 12

16 11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 19 8

6 9 2 13 18

15 20 7 3

10 5 17 12

21 16 11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 19 8

6 9 2 13 18

15 20 7 3

10 5 22 17 12

21 16 11 4

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 19 8

6 9 2 13 18

15 20 7 3

10 5 22 17 12

21 16 11 4 23

騎士巡回( knight tour )

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

1 14 19 8

6 9 2 13 18

15 20 7 24 3

10 5 22 17 12

21 16 11 4 23

騎士巡回( knight tour )

ゴール !

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

• 考え方:– とりあえず、行けるところまで行ってみる。– 行き詰ったら、前に戻って(バックトラック)、

別の選択肢でやってみる。

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

騎士巡回( knight tour )

スタート !

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。A

B

騎士巡回( knight tour )

ここで人生の分かれ道:

A ~ B のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。A

B

騎士巡回( knight tour )

ここで人生の分かれ道:

A ~ B のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 E

D A

C B

騎士巡回( knight tour )

ここで人生の分かれ道:

A ~ E のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 E

D A

C B

騎士巡回( knight tour )

ここで人生の分かれ道:

A ~ E のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

2

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 C

2

B

A

騎士巡回( knight tour )

ここで人生の分かれ道:

A ~ C のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 C

2

B

A

騎士巡回( knight tour )

ここで人生の分かれ道:

A ~ C のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

2

3

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

2

B 3

A

騎士巡回( knight tour )

ここで人生の分かれ道:

A ~ B のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

2

B 3

A

騎士巡回( knight tour )

ここで人生の分かれ道:

A ~ B のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

2

3

4

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

A 2

B 3

4

騎士巡回( knight tour )

A ~ B のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

A 2

B 3

4

騎士巡回( knight tour )

A ~ B のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

2

3

5

4

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B

2

A 3

5

4

騎士巡回( knight tour )

A ~ B のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B

2

A 3

5

4

騎士巡回( knight tour )

A ~ B のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 2

3

5

4

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 D E

6 2 F

3

C 5 A

B 4

騎士巡回( knight tour )

A ~ F のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 D E

6 2 F

3

C 5 A

B 4

騎士巡回( knight tour )

A ~ F のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 2

7 3

5

4

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 2 B

7 3

5

A 4

騎士巡回( knight tour )

A ~ B のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 2 B

7 3

5

A 4

騎士巡回( knight tour )

A ~ B のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 2

7 3

5 8

4

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 2

B 7 C 3

A 5 8

4

騎士巡回( knight tour )

A ~ C のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 2

B 7 C 3

A 5 8

4

騎士巡回( knight tour )

A ~ C のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 2

7 3

5 8

9 4

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 2

7 3

10 5 8

9 4

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 C

6 2

7 A 3

10 5 B 8

9 4

騎士巡回( knight tour )

A ~ C のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 C

6 2

7 A 3

10 5 B 8

9 4

騎士巡回( knight tour )

A ~ C のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

7 3

10 5 8

9 4

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B C

6 11 2

7 3

10 5 8

9 4 A

騎士巡回( knight tour )

A ~ C のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B C

6 11 2

7 3

10 5 8

9 4 A

騎士巡回( knight tour )

A ~ C のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

7 12 3

10 5 8

9 4

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

7 12 3

10 5 8

9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2 C

B 7 12 3

10 5 8

A 9 4 13

騎士巡回( knight tour )

A ~ C のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2 C

B 7 12 3

10 5 8

A 9 4 13

騎士巡回( knight tour )

A ~ C のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

7 12 3

10 5 14 8

9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

7 12 3

10 5 14 8

15 9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B

6 11 2 C

7 12 3

10 5 14 A 8

15 9 4 13

騎士巡回( knight tour )

A ~ C のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B

6 11 2 C

7 12 3

10 5 14 A 8

15 9 4 13

騎士巡回( knight tour )

A ~ C のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

16 7 12 3

10 5 14 8

15 9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2 B

16 7 12 3

10 5 14 8

15 A 9 4 13

騎士巡回( knight tour )

A ~ B のどれを選ぶ?

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2 B

16 7 12 3

10 5 14 8

15 A 9 4 13

騎士巡回( knight tour )

A ~ B のどれを選ぶ?とりあえず A

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

16 7 12 3

10 5 14 17 8

15 9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

16 7 12 3

10 5 14 17 8

15 18 9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

19 16 7 12 3

10 5 14 17 8

15 18 9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 20

6 11 2

19 16 7 12 3

10 5 14 17 8

15 18 9 4 13

騎士巡回( knight tour )

手詰まり !!!!!

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 20

6 11 2

19 16 7 12 3

10 5 14 17 8

15 18 9 4 13

騎士巡回( knight tour )

手詰まり !!!!!

ダメな時は前の選択肢まで戻ってやり直す

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

19 16 7 12 3

10 5 14 17 8

15 18 9 4 13

騎士巡回( knight tour )

手詰まり !!!!!

ダメな時は前の選択肢まで戻ってやり直す

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

16 7 12 3

10 5 14 17 8

15 18 9 4 13

騎士巡回( knight tour )

手詰まり !!!!!

ダメな時は前の選択肢まで戻ってやり直す

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

16 7 12 3

10 5 14 17 8

15 9 4 13

騎士巡回( knight tour )

手詰まり !!!!!

ダメな時は前の選択肢まで戻ってやり直す

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2 B

16 7 12 3

10 5 14 8

15 A 9 4 13

騎士巡回( knight tour )

A ~ B のどれを選ぶ?A は失敗だった。

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2 B

16 7 12 3

10 5 14 8

15 A 9 4 13

騎士巡回( knight tour )

A ~ B のどれを選ぶ?A は失敗だった。じゃあ B

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

16 7 12 3

10 5 14 17 8

15 9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2 18

16 7 12 3

10 5 14 17 8

15 9 4 13

騎士巡回( knight tour )

手詰まり !!!!!

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

16 7 12 3

10 5 14 17 8

15 9 4 13

騎士巡回( knight tour )

手詰まり !!!!!

ダメな時は前の選択肢まで戻ってやり直す

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2 B

16 7 12 3

10 5 14 8

15 A 9 4 13

騎士巡回( knight tour )

A ~ B のどれを選ぶ?A は失敗だった。B も失敗だった。

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2 B

16 7 12 3

10 5 14 8

15 A 9 4 13

騎士巡回( knight tour )

すべての選択肢がダメ

ダメな時は前の選択肢まで戻ってやり直す

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B

6 11 2 C

7 12 3

10 5 14 A 8

15 9 4 13

騎士巡回( knight tour )

A ~ C のどれを選ぶ?A は失敗だった。

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B

6 11 2 C

7 12 3

10 5 14 A 8

15 9 4 13

騎士巡回( knight tour )

A ~ C のどれを選ぶ?A は失敗だった。じゃあ B

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

16 7 12 3

10 5 14 8

15 9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダメな時は                   戻ってやりな

おす。                    B もダメ!                                      人生試行錯誤。                   あきらめずに                   がんばれ!

1 22 17

6 11 2 23 18

21 16 7 12 3

10 5 14 19 8

15 20 9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B

6 11 2 C

7 12 3

10 5 14 A 8

15 9 4 13

騎士巡回( knight tour )

A ~ C のどれを選ぶ?A は失敗だった。B は失敗だった。

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B

6 11 2 C

7 12 3

10 5 14 A 8

15 9 4 13

騎士巡回( knight tour )

A ~ C のどれを選ぶ?A は失敗だった。B は失敗だった。じゃあ C

• 分かれ道は、とりあえず進んでみる。                   ダメな時は                   戻ってやりな

おす。 C もダメ!                                      人生試行錯誤。                   あきらめずに                   がんばれ!

1 18 23

6 11 2 17 22

19 16 7 12 3

10 5 14 21 8

15 20 9 4 13

騎士巡回( knight tour )

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1 B

6 11 2 C

7 12 3

10 5 14 A 8

15 9 4 13

騎士巡回( knight tour )

A ~ C のどれを選ぶ?A は失敗だった。B は失敗だった。C は失敗だった。

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2

7 12 3

10 5 14 8

9 4 13

騎士巡回( knight tour )

ダメな時はあきらめずに前の選択肢まで戻ってやり直す

• 分かれ道は、とりあえず進んでみる。                   ダ

メな時は                   

戻ってやりなおす。

1

6 11 2 C

B 7 12 3

10 5 8

A 9 4 13

騎士巡回( knight tour )

A ~ C のどれを選ぶ?A は失敗だったじゃあ、B いっときますか

• さっき見せたのは正解(の一つ)1 14 19 8

6 9 2 13 18

15 20 7 24 3

10 5 22 17 12

21 16 11 4 23

騎士巡回( knight tour )

試行回数(移動回数)は

8,839 回!

• チェスの「ナイト」、盤面のすべてのマスを

                   一度だけ訪問する

• 考え方:– とりあえず、行けるところまで行ってみる。– 行き詰ったら、前に戻って(バックトラック)、

別の選択肢でやってみる。

騎士巡回( knight tour )

騎士巡回( knight tour )A

B

A B1 E

D A

C B

A B C D E1 C

2

B

A

A B C

1 B

6 11 2 C

7 12 3

10 5 14 A 8

15 9 4 13

1

6 11 2 B

16 7 12 3

10 5 14 8

15 A 9 4 13

A B C

A B

試行やり直し(バックトラック)

選択肢

失敗 失敗

失敗 失敗1 14 19 8

6 9 2 13 18

15 20 7 24 3

10 5 22 17 12

21 16 11 4 23

ゴール!

失敗

失敗

失敗

失敗 失敗

失敗失敗

失敗

バックトラック(モデル)A

B

A B1 E

D A

C B

A B C D E1 C

2

B

A

A B C

1 B

6 11 2 C

7 12 3

10 5 14 A 8

15 9 4 13

1

6 11 2 B

16 7 12 3

10 5 14 8

15 A 9 4 13

A B C

A B

試行やり直し(バックトラック)

選択肢

失敗 失敗

失敗 失敗1 14 19 8

6 9 2 13 18

15 20 7 24 3

10 5 22 17 12

21 16 11 4 23

ゴール!

失敗

失敗

失敗

失敗 失敗

失敗失敗

失敗

Recommended