質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

914閲覧

Pythonで二重配列を使った問題

Lopn_

総合スコア50

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/06/24 07:31

編集2020/06/24 07:33

Pythonで、下記のような4×6の二重配列の1が上下左右で隣接してる群の数を求めろという問題がわかりません

python

1 2list = [[0,1,1,0], 3 [1,0,1,0], 4 [1,0,0,0], 5 [0,1,1,1], 6 [0,1,0,1], 7 [0,1,1,1] 8]

説明が下手で申し訳ないのですが、多少わかりやすくかくと、下記の図のように隣接している要素をカウントするということです

python

1 2list = [[0,X,X,0], 3 [Y,0,X,0], 4 [Y,0,0,0], 5 [0,Z,Z,Z], 6 [0,Z,0,Z], 7 [0,Z,Z,Z] 8]

この場合は隣接する群がXYZの3つなので、結果は3が出ていれば合っています

この問題を再帰関数を使用して解くということなのですが、そもそもの検索方法がいまいちわからず、進んでいません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stdio

2020/06/24 08:21

その再帰関数を利用したソースコードをアップしてもらえませんか?
meg_

2020/06/24 11:23

問題にヒントはありませんか?
Lopn_

2020/06/24 12:25

@meg_ 問題にヒントはありませんでした
Lopn_

2020/06/24 12:26

@stdio そもそもの計算方法が分かっていないので、コード自体が書けていないです
meg_

2020/06/24 15:07

「再帰関数を使用して」にイメージが沸かなかったです。
guest

回答2

0

その問題は迷路の経路探索問題の応用編だと思います。「python 迷路」で検索して分かりやすい説明を探してください。それが理解できたらこの問題が解けるはずです。

私が日本語と図で解説することはできることはできるのですが、もうすでにたくさんの情報があるので省略しました。

投稿2020/06/25 01:32

anndonut

総合スコア667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

再帰的に関数呼び出す形で書いてみました。正解は色々あると思いますが、一例として…
全部書くとアレなので、一部は動作だけコメントに置き換えています。

python3

1import numpy as np 2list1 = [[0,1,1,0], 3 [1,0,1,0], 4 [1,0,0,0], 5 [0,1,1,1], 6 [0,1,0,1], 7 [0,1,1,1] 8] 9area = np.array(list1) 10ones = # area[y][x]==1である座標群[y,x]をリスト化 11mark = 2 # 置き換え用の数字 12def dfs(area, y, x, ones, mark): 13 area[y][x] = mark # 1をmarkに置き換え 14 ones.remove([y,x]) 15 if len(ones) == 0: # 全部置き換えたら終了 16 print("最終状態") 17 print(area) 18 print("群の数:",mark-1) 19 return 20 21 if # y,xに隣接するものがones内にあればその座標y,xでdfsを呼び出す 22 else # 隣接するものがなければmarkを+1してまたdfsを開始 23 24y,x =ones[0] # 開始座標 25dfs(area, y,x, ones, mark) 26 27""" 28最終状態 29[[0 2 2 0] 30 [3 0 2 0] 31 [3 0 0 0] 32 [0 4 4 4] 33 [0 4 0 4] 34 [0 4 4 4]] 35群の数: 3 36"""

投稿2020/06/25 00:50

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問