Александр, Вам годится любой из алгоритмов обхода графа, который работает с представлением "для каждой вершины - есть список связанных с ней вершин". Как составлять этот список - Вы сами сказали.
Александр, В глубину всегда использует стек. Можно его реализовать самому, а не использовать системный делая рекурсию. Грубо говоря возьмите с википедии реализацию обхода в ширину и вместо очереди используйте стек.