Google Code Jam で次の問題を聞きました。大会はもう終わったから話してもいいよhttps://code.google.com/codejam/contest/2270488/dashboard#s=p3
古い地図をたどっていくと、恐怖の海賊ラリーの秘密の宝庫にたどり着きました!
宝の山は N 個のロックされたチェストで構成されており、各チェストは特定の種類のキーでのみ開くことができます。さらに、宝箱を開ける鍵は一度使うと二度と使えません。すべてのチェストの中には、もちろんたくさんの宝物があり、他のチェストを開くために使用できる 1 つまたは複数のキーが見つかる場合もあります。チェストには同じ種類のキーが複数含まれている場合があり、任意の数のキーを保持できます。
すでに少なくとも 1 つのキーを持っており、マップにはさまざまなチェストの中に他にどのようなキーがあるかが示されています。このすべての情報で、すべてのチェストのロックを解除する方法を理解できますか?
すべてのチェストを開く方法が複数ある場合は、「辞書的に最小」の方法を選択します。
コンテストには 2 つのデータセットがありました。最大で 20 個のチェストのトローブを含む小さなデータセットと、200 個のチェストのトローブを含む大きなデータセットです。
私のバックトラッキング分岐限定アルゴリズムは、小さなデータセットを解決するのに十分な速さしかありませんでした。より高速なアルゴリズムは何ですか?