アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

22
アアアアアアアアアアアア アアアア 10-2 n アアアアアアアアアア アアアア アア アアアアアアア アアアア

Upload: kin

Post on 16-Mar-2016

66 views

Category:

Documents


2 download

DESCRIPTION

アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」. 横浜国立大学 理工 学部 数物・電子情報系学科 富井尚志. バックトラックアルゴリズム. とりあえずやってみる ダメ なら戻って別の道を探る あの とき別の道を選んでいたら 、、、 試行錯誤( trial and error ) 結局全部のケースをやってみる(完全解). n クイーン( n-queens ). チェスの「 クイーン 」. n クイーン( n-queens ). チェスの「 クイーン 」 、 n x n の盤面上で、 n 個のクイーンが - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

アルゴリズムとデータ構造補足資料 10-2「 n クイーン」

横浜国立大学理工学部 数物・電子情報系学科富井尚志

Page 2: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

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

• 試行錯誤( trial and error )– 結局全部のケースをやってみる(完全解)

Page 3: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

n クイーン( n-queens )• チェスの「クイーン」

Page 4: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• チェスの「クイーン」、 n x n の盤面上で、                    n 個のク

イーンが                   お互いに取

らない                   (効き筋にな

らない)                   ように配置

n クイーン( n-queens )

Page 5: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• この問題を解くためのデータ構造n クイーン( n-queens )

Page 6: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• この問題を解くためのデータ構造n クイーン( n-queens )

column 列 col = 0 col = 1 col = 2 col = 3 col = 4row 行

row = 0

row = 1

row = 2

row = 3

row = 4

Page 7: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• この問題を解くためのデータ構造• すでに効き筋→FALSE• queen を置ける→TRUE

n クイーン( n-queens )TRUE FALSE TRUE FALSE TRUE

FALSE FALSE FALSE TRUE TRUE

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE TRUE TRUE

TRUE FALSE TRUE FALSE TRUE

column 列 col = 0 col = 1 col = 2 col = 3 col = 4row 行

row = 0

row = 1

row = 2

row = 3

row = 4

Page 8: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• この問題を解くためのデータ構造• すでに効き筋→FALSE• queen を置ける→TRUE

これを 2 次元配列で書いてもよいが、ここでは次の 3 つの配列で表現

n クイーン( n-queens )TRUE FALSE TRUE FALSE TRUE

FALSE FALSE FALSE TRUE TRUE

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE TRUE TRUE

TRUE FALSE TRUE FALSE TRUE

column 列 col = 0 col = 1 col = 2 col = 3 col = 4row 行

row = 0

row = 1

row = 2

row = 3

row = 4

Page 9: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• この問題を解くためのデータ構造配列1:q_row[row]その行に queen がいるときに FALSEいないときに TRUE

n クイーン( n-queens )TRUE FALSE TRUE FALSE TRUE

FALSE FALSE FALSE TRUE TRUE

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE TRUE TRUE

TRUE FALSE TRUE FALSE TRUE

column 列 col = 0 col = 1 col = 2 col = 3 col = 4row 行

row = 0

row = 1

row = 2

row = 3

row = 4

Page 10: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• この問題を解くためのデータ構造配列 2 :q_se[col-row+N-1]

南東斜め筋はcol-row が一定!

n クイーン( n-queens )TRUE FALSE TRUE FALSE TRUE

col-row=-1FALSE FALSE FALSE TRUE TRUE

FALSE

col-row=-1FALSE FALSE FALSE FALSE

FALSE FALSE

col-row=-1FALSE TRUE TRUE

TRUE FALSE TRUE

col-row=-1FALSE TRUE

column 列 col = 0 col = 1 col = 2 col = 3 col = 4row 行

row = 0

row = 1

row = 2

row = 3

row = 4

Page 11: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• この問題を解くためのデータ構造配列 3 :q_sw[col+row]

南西斜め筋はcol+row が一定!

n クイーン( n-queens )TRUE FALSE TRUE

col+row=-3

FALSE TRUE

FALSE FALSE

col+row=-3

FALSE TRUE TRUE

FALSE

col+row=-3

FALSE FALSE FALSE FALSE

col+row=-3

FALSE FALSE FALSE TRUE TRUE

TRUE FALSE TRUE FALSE TRUE

column 列 col = 0 col = 1 col = 2 col = 3 col = 4row 行

row = 0

row = 1

row = 2

row = 3

row = 4

Page 12: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• この問題を解くためのデータ構造配列:q_pos[col]=row

この配列だけ、前の 3 つと値が異なることに注意

n クイーン( n-queens )column 列 col = 0 col = 1 col = 2 col = 3 col = 4

row 行row = 0

row = 1

row = 2

row = 3

row = 4

Page 13: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• バックトラックによる解法配列:q_pos[col]=row

に、とりあえず置いてみる。q_pos[0]=0

n クイーン( n-queens )column 列 col = 0 col = 1 col = 2 col = 3 col = 4

row 行row = 0

row = 1

row = 2

row = 3

row = 4

Page 14: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• バックトラックによる解法配列:q_pos[col]=row

に、とりあえず置いてみる。q_pos[0]=0効き筋を埋める

n クイーン( n-queens )column 列 col = 0 col = 1 col = 2 col = 3 col = 4

row 行row = 0

row = 1

row = 2

row = 3

row = 4

FALSEFALSE FALSE FALSE FALSE

FALSE

FALSE

FALSE

FALSE

Page 15: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• バックトラックによる解法配列:q_pos[col]=row

に、とりあえず置いてみる。次の候補はA, B, C

n クイーン( n-queens )column 列 col = 0 col = 1 col = 2 col = 3 col = 4

row 行row = 0

row = 1

row = 2

row = 3

row = 4

FALSEFALSE FALSE FALSE FALSE

FALSE

A FALSE

B FALSE

C FALSE

Page 16: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• バックトラックによる解法配列:q_pos[col]=row

とりあえず Aq_pos[1]=2に置いてみる

n クイーン( n-queens )column 列 col = 0 col = 1 col = 2 col = 3 col = 4

row 行row = 0

row = 1

row = 2

row = 3

row = 4

FALSE FALSE FALSE FALSE FALSE

FALSE

FALSE

FALSE

FALSE

Page 17: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• バックトラックによる解法配列:q_pos[col]=row

とりあえず A効き筋チェック

n クイーン( n-queens )column 列 col = 0 col = 1 col = 2 col = 3 col = 4

row 行row = 0

row = 1

row = 2

row = 3

row = 4

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE

FALSE FALSE

Page 18: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• バックトラックによる解法配列:q_pos[col]=row

とりあえず A次の候補は A

n クイーン( n-queens )column 列 col = 0 col = 1 col = 2 col = 3 col = 4

row 行row = 0

row = 1

row = 2

row = 3

row = 4

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE

A FALSE FALSE

Page 19: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• バックトラックによる解法配列:q_pos[col]=row

とりあえず Aq_pos[2]=4に置いてみる

n クイーン( n-queens )column 列 col = 0 col = 1 col = 2 col = 3 col = 4

row 行row = 0

row = 1

row = 2

row = 3

row = 4

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE

FALSE FALSE

Page 20: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• バックトラックによる解法配列:q_pos[col]=row

とりあえず A効き筋チェック

n クイーン( n-queens )column 列 col = 0 col = 1 col = 2 col = 3 col = 4

row 行row = 0

row = 1

row = 2

row = 3

row = 4

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE FALSE

FALSE FALSE FALSE FALSE FALSE

Page 21: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• バックトラックによる解法この場合にはうまくいっていますが、次の候補がなければキャンセルして前に戻る(バックトラック)

n クイーン( n-queens )column 列 col = 0 col = 1 col = 2 col = 3 col = 4

row 行row = 0

row = 1

row = 2

row = 3

row = 4

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE

FALSE FALSE FALSE FALSE FALSE

FALSE FALSE FALSE FALSE

FALSE FALSE FALSE FALSE FALSE

Page 22: アルゴリズムとデータ構造 補足資料 10-2 「 n クイーン」

• チェスの「クイーン」、 n x n の盤面上で、  n 個のクイーンがお互いに取らない  (効き筋にならない)ように配置• 考え方:– とりあえず、置いてみる。– 行き詰ったら、前に戻って(バックトラック)、別の選択肢でやってみる。

n クイーン( n-queens )