0

私は、オオカミ、ヤギ、キャベツの問題に似たこのなぞなぞを解こうとしており、それをグラフ形式で表現しようとしています (ノードとエッジがすべての潜在的なパスを表しています)。

これが問題です:

2 つのサーカス家族は、母、父、娘からなる 1 つの家族が空中ブランコの左側に、もう 1 つの家族 (2 人の兄弟と 1 人の姉妹) が空中ブランコの右側にいるという行為を行いました。空中ブランコ。各人は自分のブランコにぶら下がることから始め、次のように 2 つの家族を分ける空のブランコがあります。

母、父、娘、空、妹、弟、兄

人は自分のスイングから、現在のスイングに隣接するか、どちらかの家族の 1 人の個人によって自分の位置から離れている空のスイングにスイングすることしかできません。トリックの目的は、両方の家族が側を交換することです。家族のどのメンバーも、どの段階でも後方にスイングすることはできません。トリックが成功する結果となる一連の動きは何ですか?

左側のファミリーをファミリー「A」、右側のファミリーを「B」、空のファミリーを「É」とラベル付けし、最初の位置から始めて、存在する可能性のあるすべての順列をグラフ化しようとしました。

今、私は最初の可能性のある動き (隣接する空のスイングへの移動) のみを実行しようとしましたが、技術的な問題が発生しているようです。理由はわかりません。

各ステップで可能なステップのリストを作成しようとしています。

これは私が持っているものです。

iC=['A','A','A','E','B','B','B']
newC=[]

for x in range(0,7):
    if iC[x]=='E':
        if iC[x-1]=='A' and iC[x+1]=='B':
            iC[x-1]='E'
            iC[x]='A'
            newC.append(iC)
            iC[x-1]='A'
            iC[x]='B'
            iC[x+1]='E'
            newC.append(iC)
        elif iC[x-1]=='A':
            iC[x-1]='E'
            iC[x]='A'
            newC.append(iC)
        elif iC[x+1]=='B':
            iC[x+1]=='E'
            iC[x]=='B'
            newC.append(iC)
        break

print(newC)

新しいアイテムを新しいリストに追加しようとしていますが、代わりにアイテムが変更されます。追加がifステートメントに2回あり、追加されたアイテムを変更するだけなのでしょうか? これを行うより効率的な方法はありますか?助けていただければ幸いです:)

4

1 に答える 1