Необходимо найти все контуры графа. Примерно понимаю, что это делается через поиск в глубину, но вот как ни старайся, не выходит найти их полностью и без повторений. Вот то, что у меня пока есть:
private class Graph {
private int V;
private ArrayList<Integer>
Graph(int v) {
V = v;
adj = new ArrayList[v];
for (int i = 0; i < v; ++i)
adj[i] = new ArrayList<>();
}
void addEdge(int v, int w) {
adj[v].add(w); // Add w to v's list.
}
void DFSUtil(int v, boolean visited[], LinkedList<Integer> tempList, ArrayList<String> globalPathList) {
TextView out = findViewById(R.id.textView2);
visited[v] = true;
tempList.addLast(v);
if (v == globalVer) {
globalPathList.add(tempList.toString());
Log.w("CHECK", tempList.toString());
if (tempList.size() > 1)
tempList.removeLast();
}
for (Integer i : adj[v]) {
if (!visited[i] | i == globalVer) {
DFSUtil(i, visited, tempList, globalPathList);
if (tempList.size() > 1)
tempList.removeLast();
}
}
visited[v] = false;
}
boolean visited[] = new boolean[V];
for (int i = 0; i < V; i++){
visited[i] = false;
}
}
}
public void findPath(View view) {
LinkedList<Integer> tempList = new LinkedList<>();
ArrayList<String > globalPathList = new ArrayList<>();
Graph g = new Graph(6);
g.addEdge(0, 1);
g.addEdge(0, 3);
g.addEdge(0, 4);
g.addEdge(1, 2);
g.addEdge(1, 4);
g.addEdge(1, 5);
g.addEdge(2, 3);
g.addEdge(2, 4);
g.addEdge(2, 5);
g.addEdge(3, 1);
g.addEdge(3, 4);
g.addEdge(4, 5);
g.addEdge(5, 0);
globalVer = 1;
g.DFS(globalVer, tempList, globalPathList);
Log.w("FINAL_CHECK", globalPathList.toString());
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей