Занятие 5. Справочник

Занятие 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 + " ");
}