UVA 291サンタクロースDFSのハウス

トピック:

あなたの幼年期では、最も可能性の高いサンタクロースの家の謎を解決しなければなりませんでした。あなたは重要性が鉛筆を持ち上げることなくストレッチに家を描画し、二回ラインを描くない上にあったことを覚えていますか?リマインダとして、それは、図1に示したように見えることがあります。

  figure20
図:サンタクロースの家

さて、数年後に、今のように、あなたは``再び「」家を描くが、コンピューターにする必要があります。一つの可能性は十分ではありませんように、我々は必要とすべての左下隅に起動するときに可能性を。あなたのストレッチを定義しながら、図2の例に従ってください。

  figure33
図:このシーケンスは、出力線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(01"" ); 
}
コードの表示

 




おすすめ

転載: www.cnblogs.com/cautx/p/11525309.html