Скачиваний:
16
Добавлен:
18.03.2018
Размер:
1.84 Кб
Скачать
//Поиск всех циклов в графе

#include <conio.h>
#include <iostream>
#define N 7

using namespace std;

int G[N][N]={{0,1,1,0,0,0,0},
             {1,0,1,0,0,0,0},
             {1,1,0,1,0,0,0},
             {0,1,0,0,1,0,0},
             {0,0,0,0,0,1,0},
             {0,0,0,1,1,0,0},
             {1,0,0,0,0,0,0}},
  P[N], k;

int next (int i, int cur)
{
    cur++;
    while (cur<N && !G[i][cur]) cur++;
    if (cur<N) return cur;
    return -1;
}

void Cycle (int x)
{
     int y, i;
     P[++k]=x;
     y = -1; //N(a):=V(a) 
     while ((y = next(x,y))>-1)	//пока есть следующая смежная вершина
     {
           if (y==P[0])	//если эта вершина совпадает с первой
           {
             if (k>1)   //если длина пути больше 3
             {
                for (i=0; i<=k; i++)
                  cout<<P[i]<<" ";	//выводим циклический путь
                cout<<P[0]<<endl;
             }
           }
           else
           {
              for (i=1; i<=k && P[i]!=y; i++);	//ищем текущую вершину среди вершин пути
              if (i>k)
                 Cycle (y);      //если вершина y еще не посещалась
           }
     }
     k--;
}

void DelNodeNoCycle(void)
{
     int i, j, f1, f2, f3;
     do
     {
        f1=0; 
        for (i=0; i<N; i++)
        {
          for (f3=f2=j=0; j<N; j++)
          {  
              f2=f2||G[i][j];
              f3=f3||G[j][i];
          }
          if (f2!=f3)
          {
             for (j=0; j<N; j++)
               G[i][j]=G[j][i]=0;
             f1=1;
          }
        }
     }
     while (f1);
}

main()
{
    int a,b;
    DelNodeNoCycle();
	for (a=0; a<N; a++)
	{
       k=-1;
       Cycle(a);
       for (b=0; b<N; b++)
          G[a][b]=G[b][a]=0;
    }
    getch();
    return 0;
}
Соседние файлы в папке Граф