// Uebung 12.2 - traverse / dfs

// mit Fehler!

public Graph traverse(Object startVertex)
{
	Graph spanningTree = new AdjListGraph(isDirected() );
	Vertex v = (Vertex)vertices.get(startVertex);
	if (v== null)
	{
		System.out.println("Fehler");
	}
	else
	{
		spanningTree.addVertext(startVertex);
		spanningTree.spanningTree(v,null);
		dfs(v,spanningTree);
		Iterator it = vertices.values().iterator();
		while(it.hasNext() )
		{
			((Vertex)it.next()).visited = false;
		}
	}
	return spanningStree;
}

private void dfs(Vertex root, Graph st)
{
	System.out.print(root.data + " ");
	root.visited = true;
	Iterator it = root.adjList.iterator();
	while (it.hasNext())
	{
		Vertex v = (Vertex)it.next();
		if(!v.visited)
		{
			st.addVertex(v.data);
			st.addEdge(root.data, v.data);
			dfs(v, st);
		}
	}
}

//

void spanningTree (Vertex v,x)
{
	if(!v.visited)
	{
		v.visited = true;
		for each w adjacent to v
		{
			spanningTree(w,v);
		}
	}
	else
	{
		x.removeEdge(v);
	}
}

// v: current Vertex
// x: from