ボタンを押したとき次に光るボタンの組を Dictionary<int, int>
に詰めておき、押したボタンを Dictionary<int, int>
から除いていく。
Dictionary<int, int>
中に無いボタンを押そうとしたら、それはすでに押されたボタンということになるので、ボタン2を光らせることは不可能と判断できる。
using System; using System.Collections.Generic; namespace ABC065B { class Program { static void Main(string[] args) { var N = int.Parse(Console.ReadLine()); var a = new Dictionary<int, int>(); for(var i = 1; i <= N; i++) { a[i] = int.Parse(Console.ReadLine()); } var btn = 1; var cnt = 0; while (true) { if (btn == 2) { Console.WriteLine(cnt); return; } else if (a.ContainsKey(btn)) { var next = a[btn]; a.Remove(btn); btn = next; cnt++; } else { Console.WriteLine(-1); return; } } } } }