米国の州のように、州のリストが与えられた場合、州が連続しているかどうかを判断するアルゴリズムを作成しようとしています。順序は関係なく、状態を再訪することができます。
例:
AZ, CA, OR, WA
隣接しているAZ, CA, NM, UT
隣接しているAZ, NM, OR, WA
連続していない
仮定:
- 州を表す文字列のコレクションがあります。
状態接続のコレクションがあります。
class StateConnection { public string OriginState { get; set; } public string ConnectingState { get; set; } }
このコレクションには両方向のレコードがあります。
OriginState = AZ, ConnectingState = CA
OriginState = CA, ConnectingState = AZ
私は何を試しましたか?
試行 1: コレクション内の各状態について、リスト内に別の状態を持つ StateConnection が少なくとも 1 つあることを確認します。
なぜうまくいかなかったのですか? これにより、2 つの別個の連続した範囲が渡される 3 番目の例が可能になります。
試行 2: 状態をチェックした後、候補接続状態のリストから状態を削除します。これには、すべての状態に 1 回触れる完全なパスが必要になります。
なぜうまくいかなかったのですか? これは、1 つの州が複数の州のハブとして機能する 2 番目の例を許可しません。
私はグラフ理論の問題をしばらく解いていないので、少しさびています。
最短経路や巡回セールスマンのようなものは求めていません。どのパスが取られるか、または何回の移動が使用されるかは気にしません。隙間があるかどうかだけが気になる。
私はこれをC#で書いていますが、他の言語で自由に答えてください。