Занятие 5. Справочник
Поиск цикла в графе c выводом, заданном матрицей смежности G
?????????????????????
…
static int[] path = new int[1000]; // 1000 – количество вершин в графе
static int n = 0; // количество уже открытых вершин
static boolean foundCycle = false;
static void DFS(int v, int p)
{
color[v] = GREY;
path[n] = v;
n++;
for (int i = 0; i < N; i++)
{
if (p != i && G[v][i] == 1 &&
color[i] == GREY && !foundCycle)//обнаружен первый цикл
{
foundCycle = true;
printCycle();
}
if (G[v][i] == 1 && color[i] == WHITE) DFS(i, v);
}
color[v] = BLACK;
}
static void printCycle()
{
int start = path[n-1];
int i = n – 2;
while(path[i] != start)
{
if (color[i] == GREY)
{
out.println (path[i]);
}
}
}
Вывод эйлерова цикла в графе.
Перед использованием необходимо убедиться, что степени всех вершин четны.
static euler (int v)
{
for (int i = 0; j < n; j++)
{
if (G[v][i] == 1)
{
G[v][i]=0;
G[i][v]=0;
euler(i);
}
}
out.print(i + " ");
}