トピック:
あなたの幼年期では、最も可能性の高いサンタクロースの家の謎を解決しなければなりませんでした。あなたは重要性が鉛筆を持ち上げることなくストレッチに家を描画し、二回ラインを描くない上にあったことを覚えていますか?リマインダとして、それは、図1に示したように見えることがあります。
さて、数年後に、今のように、あなたは``再び「」家を描くが、コンピューターにする必要があります。一つの可能性は十分ではありませんように、我々は必要とすべての左下隅に起動するときに可能性を。あなたのストレッチを定義しながら、図2の例に従ってください。
図:このシーケンスは、出力線153125432を与えるだろう
すべての可能性があることを意味し、順位を上げることにより、OUTPUTFILEに記載されてする必要が1234 ...の前にリストされている... 1235。
出力だから、OUTPUTFILEは次のようになります。
12435123 13245123 ... 1512342の
分析:
二辺1-4及び2-4に加えて、全ての側面が左下(点1)からQの和が描画するかどうか、接続されている、5ポイントとサンタの家を表します一点出力アウトずつ、家のパスは何ですか。
例えば:
12435123
13245123
......
15123421の
分析:
開始点から、すべてのエッジを介して深い検索、エッジの数は、端部8の再帰的なトラバースに達するまで。
ACコード:
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 int型の M [ 6 ] [ 6 ]。 無効INITを() { ため(int型 i = 1 ; iは= < 5、iは++ ) { ための(int型 J = 1 ; J <= 5 ; J ++ ) { 場合(!I = J)M [I] [J] = 1 ; 他 M [I] [J] = 0 ; } } M [ 1 ] [ 4 ] = mの[ 4] [ 1 ] = 0 。 M [ 2 ] [ 4 ] = M [ 4 ] [ 2 ] = 0 。 } ボイド DFS(int型 E、int型 K、ストリングS) { S + =(K + ' 0 ' )。 もし(Eの== 8 ) { COUT << S << ENDL。 返します。 } のために(int型 i = 1 ; iは= < 5 ; iが++ ) { もし(M [K] [I]) { M [i]が[K] = mの[K] [I] = 0 ; DFS(E + 1 、I、S)。 M [i]は[K] = M [k]は[I] = 1 。 } } } int型のmain() { INIT()。 DFS(0、1、"" ); }