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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

500閲覧

総数を求めるアルゴリズム

yonhark0

総合スコア11

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/04/10 16:05

編集2020/04/11 06:46

下の表のように方向を決める数字があり、その方向に+1をしたいです。
〇の部分が3の場合、〇の下のマスに+1をするといった感じです。
また+1されたマスが3の場合、下のマスに+2をして最終的な累積量を知りたいです。
|0|x1|x2|x3|:|x1|x2|x3|
|:--|:--:|--:|
|y1|6|7|8|:|↖|↑|↗
|y2|5|〇|1|:|←|〇|→
|y3|4|3|2|:|↙|↓|↘

例えば下の表であれば、求めている実行結果は一番右の表の部分です。
|0|x1|x2|x3| :|x1|x2|x3|:|x1|x2|x3
|:--|:--:|--|
|y1|3|1|8|:|↓|→|↗|:|0|1|8|
|y2|2|7|7|:|↘|↑|↑|:|1|0|5|
|y3|1|8|7|:|→|↗|↑|:|0|3|0|

python

1Q = np.full((3,3),0) 2 3for a in range(3): 4 for b in range(3): 5 if K[a][b] == 1: 6 Q[a][b+1] += 1 7 elif K[a][b] == 2: 8 Q[a+1][b+1] += 1 9 elif K[a][b] == 3: 10 Q[a+1][b] += 1 11 elif K[a][b] == 4: 12 Q[a+1][b-1] += 1 13 elif K[a][b] == 5: 14 Q[a][b-1] += 1 15 elif K[a][b] == 6: 16 Q[a-1][b-1] += 1 17 elif K[a][b] == 7: 18 Q[a-1][b] += 1 19 elif K[a][b] == 8: 20 Q[a-1][b+1] += 1 21 22print(Q)

それぞれの方向で場合分けして最初の+1をするところまでは、何とか出来たのですが累積量まで自力でたどり着けませんでした。
自分の実行結果↓
|0|x1|x2|x3|
|:--|:--:|--:|
|y1|0|1|2
|y2|1|0|2|
|y3|0|2|0|

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

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

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

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

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

jun68ykt

2020/04/10 22:04

ご質問にある、 > 例えば下の表であれば、 の事例で、初期状態の行列のy2行x2列が、はじめ 7 だったのが、矢印を要素とする行列による演算によって、0 になっていますが、これはどのような計算を経て7 から 0 になったのか、算出手順を追記いただければと思います。
meg_

2020/04/10 23:36

コード中のKとACCは何ですか?
yonhark0

2020/04/11 06:50

meg_さん すみません、ACCはQの間違いです。 Kは、「例えば下の表であれば」の1番左の表です。
yonhark0

2020/04/11 06:55

jun68yktさん 初期状態の左の行列は矢印を数字で表していて、右の行列のx2y2は矢印が入ってきていないため0になっています。 わかりづらくてすみません。
guest

回答1

0

ベストアンサー

直接の回答ではないですが、グラフ(特に有向非巡回グラフ=DAG)としてみれば、「各ノードに到達可能なノードの個数(自分除く)」が欲しい答えになります。こちらの方法の方がより簡単に解けるかもしれません。

もしDAGになっていない(つまりサイクルがある)とき答えがどうなるかは質問文から明らかではないので考慮していません。

イメージ説明

投稿2020/04/11 05:50

karamarimo

総合スコア2551

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

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

yonhark0

2020/04/11 06:56

そんな方法があるんですね、試してみます。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問