Прежде всего,
for (BigInteger number : input.nextLine().split(" "))
не будет работать, потому что .split()
возвращает объект типа String[]
, и вы не можете напрямую трактовать String
как BigInteger
. ].
Кроме того, вы удваиваете свои циклы for. Та строка, которую я скопировал выше, , если работает так, как вы хотели, будет перебирать все числа на вашем входе. Так что нет необходимости в этом внутреннем цикле for. На самом деле, он даже не скомпилируется, поскольку BigInteger
не имеет метода .length()
.
Но вы на правильном пути. То, что вы можете сделать, это токенизировать ввод, как вы уже делаете, и поместить каждый элемент в стек как есть. Потому что нет необходимости помещать их в стек как BigInteger
. У вас может быть Stack<String>
, а затем конвертировать их в BigInteger
, когда вы вытаскиваете их обратно, чтобы выполнить сложение. Или, в качестве альтернативы, конвертируйте их в BigInteger
, помещая каждый в стек.
Моим первым побуждением было использовать метод, аналогичный стене после решателя лабиринта . По сути, следуйте за ребрами и всегда вынимайте крайнее правое ребро из вершины. Любые циклы, с которыми вы столкнетесь при использовании этого метода, будут границами лица. Вам нужно будет отслеживать, какие края вы прошли в каком направлении. Пройдя край в обоих направлениях, вы определили грани, которые оно разделяет. После того, как все ребра пройдены в обоих направлениях, вы определите все грани по их границам.
A simple way to do this is to simply go out and enumerate each face. The principle is simple:
Walking the tile is performed by:
I hope this made sense; it perhaps needs some diagrams to explain...
«Пересекающийся край», как вы его называете, обычно известен как аккорд . Таким образом, ваша задача - найти все бесхордовые циклы.
Эта статья выглядит так, как будто она может помочь.