Submit Search
Upload
深さ優先探索による塗りつぶし
•
22 likes
•
125,703 views
A
AtCoder Inc.
Follow
深さ優先探索による塗りつぶしの解説です
Read less
Read more
Education
Report
Share
Report
Share
1 of 42
Download now
Download to read offline
Recommended
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
AtCoder Inc.
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
AtCoder Inc.
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
AtCoder Inc.
Recommended
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
AtCoder Inc.
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
AtCoder Inc.
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
AtCoder Inc.
最適化超入門
最適化超入門
Takami Sato
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
AtCoder Inc.
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説
AtCoder Inc.
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
AtCoder Inc.
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
AtCoder Inc.
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
双対性
双対性
Yoichi Iwata
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
AtCoder Inc.
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
AtCoder Inc.
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
Chokudai search
Chokudai search
AtCoder Inc.
abc032
abc032
AtCoder Inc.
様々な全域木問題
様々な全域木問題
tmaehara
大学3年生の僕に伝えたいことをつらつらと
大学3年生の僕に伝えたいことをつらつらと
Toshinori Sato
高速フーリエ変換
高速フーリエ変換
AtCoder Inc.
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
AtCoder Inc.
More Related Content
What's hot
最適化超入門
最適化超入門
Takami Sato
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
AtCoder Inc.
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説
AtCoder Inc.
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
AtCoder Inc.
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
AtCoder Inc.
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
双対性
双対性
Yoichi Iwata
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
AtCoder Inc.
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
AtCoder Inc.
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
Chokudai search
Chokudai search
AtCoder Inc.
abc032
abc032
AtCoder Inc.
様々な全域木問題
様々な全域木問題
tmaehara
大学3年生の僕に伝えたいことをつらつらと
大学3年生の僕に伝えたいことをつらつらと
Toshinori Sato
What's hot
(20)
最適化超入門
最適化超入門
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
指数時間アルゴリズム入門
指数時間アルゴリズム入門
AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説
Union find(素集合データ構造)
Union find(素集合データ構造)
Rolling Hashを殺す話
Rolling Hashを殺す話
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
双対性
双対性
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
プログラムを高速化する話
プログラムを高速化する話
Chokudai search
Chokudai search
abc032
abc032
様々な全域木問題
様々な全域木問題
大学3年生の僕に伝えたいことをつらつらと
大学3年生の僕に伝えたいことをつらつらと
Viewers also liked
高速フーリエ変換
高速フーリエ変換
AtCoder Inc.
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
AtCoder Inc.
TCO2017R1
TCO2017R1
AtCoder Inc.
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
Takuya Akiba
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
Unity Technologies Japan K.K.
全探索
全探索
Ryunosuke Iwai
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
AtCoder Inc.
An Internal of LINQ to Objects
An Internal of LINQ to Objects
Yoshifumi Kawai
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
nitoyon
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法
Takuya Akiba
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
AtCoder Inc.
幾何コンテスト2013
幾何コンテスト2013
Naoto Mizuno
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
AtCoder Inc.
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
AtCoder Inc.
素集合データ構造
素集合データ構造
京大 マイコンクラブ
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
AtCoder Inc.
Learning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for Graphs
Takuya Akiba
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
Unity Technologies Japan K.K.
Viewers also liked
(18)
高速フーリエ変換
高速フーリエ変換
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
TCO2017R1
TCO2017R1
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
全探索
全探索
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
An Internal of LINQ to Objects
An Internal of LINQ to Objects
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
幾何コンテスト2013
幾何コンテスト2013
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
素集合データ構造
素集合データ構造
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
Learning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for Graphs
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
More from AtCoder Inc.
Square869120 contest #2
Square869120 contest #2
AtCoder Inc.
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
AtCoder Inc.
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
AtCoder Inc.
Chokudai Contest 001
Chokudai Contest 001
AtCoder Inc.
AtCoder Regular Contest 048
AtCoder Regular Contest 048
AtCoder Inc.
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説
AtCoder Inc.
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
AtCoder Inc.
DDPC 2016 予選 解説
DDPC 2016 予選 解説
AtCoder Inc.
arc047
arc047
AtCoder Inc.
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
AtCoder Inc.
AtCoder Regular Contest 046
AtCoder Regular Contest 046
AtCoder Inc.
abc031
abc031
AtCoder Inc.
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
AtCoder Inc.
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
AtCoder Inc.
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
AtCoder Inc.
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
AtCoder Inc.
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説
AtCoder Inc.
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説
AtCoder Inc.
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
AtCoder Inc.
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
AtCoder Inc.
More from AtCoder Inc.
(20)
Square869120 contest #2
Square869120 contest #2
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Chokudai Contest 001
Chokudai Contest 001
AtCoder Regular Contest 048
AtCoder Regular Contest 048
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
DDPC 2016 予選 解説
DDPC 2016 予選 解説
arc047
arc047
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
AtCoder Regular Contest 046
AtCoder Regular Contest 046
abc031
abc031
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
Recently uploaded
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
Ken Fukui
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
inspirehighstaff03
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdf
oganekyokoi
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
Ken Fukui
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
inspirehighstaff03
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdf
oganekyokoi
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
inspirehighstaff03
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
inspirehighstaff03
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
inspirehighstaff03
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
inspirehighstaff03
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
ssusere0a682
What I did before opening my business..pdf
What I did before opening my business..pdf
oganekyokoi
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
inspirehighstaff03
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
inspirehighstaff03
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
inspirehighstaff03
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
Ken Fukui
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
inspirehighstaff03
International Politics I - Lecture 1
International Politics I - Lecture 1
Toru Oga
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
yukisuga3
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
Ken Fukui
Recently uploaded
(20)
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdf
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdf
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
What I did before opening my business..pdf
What I did before opening my business..pdf
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
International Politics I - Lecture 1
International Politics I - Lecture 1
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
深さ優先探索による塗りつぶし
1.
深さ優先探索による 塗りつぶし 2015/6/6 1
2.
深さ優先探索とは 探索とは • 探索とは,可能性を調べながら,解を探す方法です 深さ優先探索とは • 最も基礎的な探索の方法です 本スライドで学ぶこと •
深さ優先探索による「塗りつぶし」 • 深さ優先探索の再帰関数による実装 • 深さ優先探索のスタックによる実装 2015/6/6 2
3.
©AtCoder Inc. All
rights reserved. 3 問題 2015/6/6 3
4.
問題 s......... #########. #.......#. #..####.#. ##....#.#. #####.#.#. g.#.#.#.#. #.#.#.#.#. #.#.#.#.#. #.....#... 2015/6/6 4 入力 • 右図のような迷路 •
. が通れる 出力 • s から g までいけるか?
5.
例 2015/6/6 5 s......... #########. #.......#. #..####.#. ##....#.#. #####.#.#. g.#.###.#. #.#.#.#.#. ###.#.#.#. #.....#... s......... #########. #.......#. #..####.#. ##....#.#. #####.#.#. g.#.#.#.#. #.#.#.#.#. #.#.#.#.#. #.....#... ↑行ける ↑行けない
6.
©AtCoder Inc. All
rights reserved. 6 塗りつぶし Flood-fill 2015/6/6 6
7.
問題を解くアプローチ 問題の解き方 1. s から行ける場所を全部調べる 2.
g に行けてれば “yes”,行けなかったら “no” 「s から行ける場所を全部調べる」 • これを塗りつぶし (flood-fill) と呼びます • とても良く使います 2015/6/6 7 これのイメージ
8.
塗りつぶしの例 2015/6/6 8 s......... #########. #.......#. #..####.#. ##....#.#. #####.#.#. g.#.###.#. #.#.#.#.#. ###.#.#.#. #.....#... s......... #########. #.......#. #..####.#. ##....#.#. #####.#.#. g.#.###.#. #.#.#.#.#. ###.#.#.#. #.....#... s から行ける領域
↑
9.
©AtCoder Inc. All
rights reserved. 9 深さ優先探索による 塗りつぶし 2015/6/6 9
10.
深さ優先探索による塗りつぶし 基本的な考え方 • 今居るところから隣に行こうとしてみる • まだ行ってなかったら行く ちゃんと塗りつぶすために •
全箇所から 4 方向への移動を試しつくす • そのために,試しつくしてない場所を覚えてお き,戻ってくる 2015/6/6 10
11.
深さ優先探索による塗りつぶし 基本:今いる所の隣を塗る 2015/6/6 11 ######.#.## ######.#.## #s......... ######.#### ######.#### 最初は s
からスタート
12.
深さ優先探索による塗りつぶし 基本:今いる所の隣を塗る 2015/6/6 12 ######.#.## ######.#.## #s......... ######.#### ######.#### 右隣へ移動(赤の矢印は s
からの経路)
13.
深さ優先探索による塗りつぶし 基本:今いる所の隣を塗る 2015/6/6 13 ######.#.## ######.#.## #s......... ######.#### ######.#### 右隣へ移動(赤の矢印は s
からの経路)
14.
深さ優先探索による塗りつぶし 基本:今いる所の隣を塗る 2015/6/6 14 ######.#.## ######.#.## #s......... ######.#### ######.#### 右隣へ移動(赤の矢印は s
からの経路)
15.
深さ優先探索による塗りつぶし 基本:今いる所の隣を塗る 2015/6/6 15 ######.#.## ######.#.## #s......... ######.#### ######.#### 分かれ道だけど,とりあえず気にせず進む
16.
深さ優先探索による塗りつぶし 基本:今いる所の隣を塗る 2015/6/6 16 ######.#.## ######.#.## #s......... ######.#### ######.#### 分かれ道だけど,とりあえず気にせず進む
17.
深さ優先探索による塗りつぶし 基本:今いる所の隣を塗る 2015/6/6 17 ######.#.## ######.#.## #s......... ######.#### ######.#### 分かれ道だけど,とりあえず気にせず進む
18.
深さ優先探索による塗りつぶし 基本:今いる所の隣を塗る 2015/6/6 18 ######.#.## ######.#.## #s......... ######.#### ######.#### 分かれ道だけど,とりあえず気にせず進む
19.
深さ優先探索による塗りつぶし 進めるところが無くなったら戻る 2015/6/6 19 ######.#.## ######.#.## #s......... ######.#### ######.#### もう進めるところがない!
20.
深さ優先探索による塗りつぶし 進めるところが無くなったら戻る 2015/6/6 20 ######.#.## ######.#.## #s......... ######.#### ######.#### なので戻ります
21.
深さ優先探索による塗りつぶし 進めるところが無くなったら戻る 2015/6/6 21 ######.#.## ######.#.## #s......... ######.#### ######.#### また戻ります
22.
深さ優先探索による塗りつぶし 戻ってきて別のところに行けたらそっちに行く 2015/6/6 22 ######.#.## ######.#.## #s......... ######.#### ######.#### ここはまだ上に行ってない!
23.
深さ優先探索による塗りつぶし 戻ってきて別のところに行けたらそっちに行く 2015/6/6 23 ######.#.## ######.#.## #s......... ######.#### ######.#### なので今度は上に行ってみます
24.
深さ優先探索による塗りつぶし 戻ってきて別のところに行けたらそっちに行く 2015/6/6 24 ######.#.## ######.#.## #s......... ######.#### ######.#### 一番上まで行ったらまた戻ります
25.
深さ優先探索による塗りつぶし 戻ってきて別のところに行けたらそっちに行く 2015/6/6 25 ######.#.## ######.#.## #s......... ######.#### ######.#### 一番上まで行ったらまた戻ります
26.
深さ優先探索による塗りつぶし 戻ってきて別のところに行けたらそっちに行く 2015/6/6 26 ######.#.## ######.#.## #s......... ######.#### ######.#### 一番上まで行ったらまた戻ります
27.
深さ優先探索による塗りつぶし 戻ってきて別のところに行けたらそっちに行く 2015/6/6 27 ######.#.## ######.#.## #s......... ######.#### ######.#### もう行く所がないのでさらに戻ります
28.
深さ優先探索による塗りつぶし 戻ってきて別のところに行けたらそっちに行く 2015/6/6 28 ######.#.## ######.#.## #s......... ######.#### ######.#### もう一個戻って
29.
深さ優先探索による塗りつぶし 戻ってきて別のところに行けたらそっちに行く 2015/6/6 29 ######.#.## ######.#.## #s......... ######.#### ######.#### 上と下も行って帰ってきて(省略)
30.
深さ優先探索による塗りつぶし 戻ってきて別のところに行けたらそっちに行く 2015/6/6 30 ######.#.## ######.#.## #s......... ######.#### ######.#### s まで戻ったら完了!
31.
余談:「深さ優先探索」? 何故これが深さ優先探索? まだ 4 方向を試し尽くしていない場所の中で,一 番「深い」場所から探索を広げるから •
試し尽くしていない場所 = 青 or 赤 • 深い = s から遠い • 一番「深い」場所 = 赤 今後紹介する「幅優先探索」等との 対比でよくわかると思います 2015/6/6 31 ######.#.## ######.#.## #s......... ######.#### ######.####
32.
©AtCoder Inc. All
rights reserved. 32 再帰関数による 深さ優先探索 2015/6/6 32
33.
再帰関数による深さ優先探索 考え方 • 位置を引数にした再帰関数を使う • 自分から
4 方向への呼び出しを行う 何故これで深さ優先探索になる? • 再帰関数なので呼び出した後戻ってくる • 戻ってきて違う方向へまた呼び出す 2015/6/6 33
34.
擬似コードでの例 関数 search(x, y)
{ if (場所 (x, y) が壁か迷路の外) return if (既に (x, y) に一度到達している) return (x, y) に到達したということを記録 // 4 方向を試す search(x + 1, y) // 右 search(x - 1, y) // 左 search(x, y + 1) // 下 search(x, y – 1) // 上 } 2015/6/6 34 関数 search をスタートの 座標から呼び出す 再帰関数なので,1 つの方向を試し終わった 後,帰ってきて次の方向を試す → 全ての位置から 4 方向を試し尽くせる
35.
擬似コードでの例 関数 search(x, y)
{ if (場所 (x, y) が壁か迷路の外) return if (既に (x, y) に一度到達している) return (x, y) に到達したということを記録 // 4 方向を試す search(x + 1, y) // 右 search(x - 1, y) // 左 search(x, y + 1) // 下 search(x, y – 1) // 上 } 2015/6/6 35 ######.#.## ######.#.## #s......... ######.#### ######.#### • 色が付いている所 = 「到達した」と記録されている所 • 青 = 再帰関数で呼び出し中の(後で戻ってくる)場所 • 赤 = 再帰関数で今訪れている場所 • 紫 = 既に再帰関数から抜けた(もう戻ってこない)場所
36.
C での例 int W,
H; // 横幅と縦幅 char maze[MAX_W][MAX_H]; // 迷路 bool reached[MAX_W][MAX_H]; // 到達できる? void search(int x, int y) { // 迷路の外側か壁の場合は何もしない if (x < 0 || W <= x || y < 0 || H <= y || maze[x][y] == ‘#’) return; // 以前に到達していたら何もしない if (reached[x][y]) return; reached[x][y] = true; // 到達したよ // 4 方向を試す search(x + 1, y); // 右 search(x - 1, y); // 左 search(x, y + 1); // 下 search(x, y – 1); // 上 } 2015/6/6 36 関数 search をスタートの 座標から呼び出す
37.
©AtCoder Inc. All
rights reserved. 37 スタックによる 深さ優先探索 2015/6/6 37
38.
スタックによる深さ優先探索 考え方 • 試すべき位置をスタックで管理 • 再帰呼び出しの代わりに,スタックへ
push アルゴリズム • 最初はスタート地点をスタックに投入 • 繰り返す:スタックから位置を取り出して,まだ訪れて いない隣があれば push 今回は詳細な解説は省略します. 今後アップロード予定の幅優先探索の解説にて,深さ優先探索のこの 方針での実装についても言及します. 2015/6/6 38
39.
スタックによる深さ優先探索 • 再帰関数が深くなりすぎると「スタックオーバーフ ロー」が起こって実行時エラーになることがあります. • スタックを用いたこっちの実装法ならば回避できます. 2015/6/6
39
40.
©AtCoder Inc. All
rights reserved. 40 おわりに 2015/6/6 40
41.
塗りつぶし 塗りつぶしの他の出番 • 行ける領域の大きさを計算する • 連結なグループの個数を数える •
などなど…… その他の塗りつぶしアルゴリズム • 今回は深さ優先探索による方法を紹介 • 塗りつぶしを行う方法は多数存在 詳しくは以下を参照 http://en.wikipedia.org/wiki/Flood_fill 2015/6/6 41 s......... #########. #.......#. #..####.#. ##....#.#. #####.#.#. g.#.###.#. #.#.#.#.#. ###.#.#.#. #.....#...
42.
深さ優先探索 深さ優先探索の他の出番 • 組合せを全て試す全探索 • その高速化である枝刈り探索 深さ以外を優先する探索 •
幅優先探索 • 最良優先探索 (→ Dijkstra / Prim のアルゴリズム) 塗りつぶしは幅優先探索などでやっても正しく行える. 深さ優先探索を使う利点は,再帰関数で簡単に書けること. 2015/6/6 42
Download now