AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC305-F Dungeon Explore
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static long[] GetSplitArr(string pStr)
{
return (pStr == "" ? new string[0] : pStr.Split(' ')).Select(pX => long.Parse(pX)).ToArray();
}
static void Main()
{
long[] wkArr = { };
Action<string> SplitAct = (pStr) => wkArr = GetSplitArr(pStr);
SplitAct(Console.ReadLine());
long N = wkArr[0];
long M = wkArr[1];
var VisitedSet = new HashSet<long>();
var Stk = new Stack<long>();
long CurrNode = 1;
while (true) {
VisitedSet.Add(CurrNode);
string ReadStr = Console.ReadLine();
if (ReadStr == "OK" || ReadStr == "-1") {
break;
}
SplitAct(ReadStr);
long[] ToNodeArr = wkArr.Skip(1).ToArray();
bool WillContinue = false;
foreach (long EachToNode in ToNodeArr) {
if (VisitedSet.Add(EachToNode)) {
Stk.Push(CurrNode);
CurrNode = EachToNode;
WillContinue = true;
Console.WriteLine(EachToNode);
break;
}
}
if (WillContinue) continue;
long Popped = Stk.Pop();
CurrNode = Popped;
Console.WriteLine(Popped);
}
}
}
解説
HashSetで訪問ノードを管理し、
Stackで「ヘンゼルとグレーテル」のパンくずを管理し、
DFS木の探索をシュミレーションしてます。