Нахождение кратчайшего цикла в графе - C (СИ) (75197)

Узнай цену своей работы

Формулировка задачи:

Программа для нахождения кратчайшего цикла в графе. Не могу корректно отладить.Прошу помочь.Заранее благодарен.
#include <stdio.h>
#include <conio.h>
#define N 10
 
/***** Vvod Grafa *****/
 
void VvodGrafa(int g[N][N], int n)
{
int i,j;// nomer stroki,stolbca
   printf("Vvedite matricy smeznosti:\n\n");
   printf(" | ");
 for(j=0;j<n;j++)
     printf("%d",j);
     putchar('\n');
 for(i=0;i<2*n+2;i++)
     putchar('-');
 for(i=0;i<n;i++)
{
     printf("\n%d| ",i);
   for(j=0;j<n;j++)
       scanf("%d",&g[i][j]);}
}

/***** Poisk cikla *****/
 
int Poisk(int g[N][N],int n,int c[],int *dcmin)//c-vektor s nomerami vershin naidennogo cikla;dlina min.cikla - dcmin
{
 int k;// ukazatel steka
 int ver[N+1];//Stek s nomerami vershin 
 int st[N];//stek
 int tv;//nomer ocherednoi vershini tecushego puti
 int i,j;
  
  /*Obhod v glubinu*/
  
  *dcmin=n+1;
 for(ver[0]=1;ver[0]<=n && *dcmin>3;)/* Nachalnaya vershina*/
 
{/*Obhod v glubinu dereva putei,nachinayshihsya s ver[0]*/
 
    k=1;ver[1]=ver[0]+1;//nachalnyu nomer priemnikov s ver[0]
  do
 {/*nahogdenie vershini tv - priemnika ver[k-1]*/
    j=ver[k-1];
 for(tv=ver[k];tv<n && (g[i][tv]==0 || tv==ver[k-2]);ver++)
     if(tv<n && k<*dcmin)
     {
         ver[k]=tv;/*vpered:tv-v stek*/
         ver[k+1]=tv[0];/*nachalnyi priemnik ver[k]*/
     if(ver[0]==ver[k] && k>0) /*nashli cikl*/
     {
         *dcmin=k;
    /*Zapomnit' cikl ver[0]...ver[k]*/
    for(j=0;j<=k;j++) c[j]=ver[j];
        k=k-3;/*Nazad: udalit' dve vershini*/
        ver[k+1]++;/*Sled priemnik ver[k]*/
     }
         k++;
     }
     else
     {
         k--;/*udalit' ver[k] iz steka*/
         ver[k]++;
     }
     }
     while(k>0 && *dcmin>3);/*stek ne pustoi*/
     }
  return *dcmin>n;
}  
 
/***** Glavnaya funkciya *****/
 
main()
{int n;
 int g[N][N];
  printf("n=");
  scanf("%d",&n);
  VvodGrafa(g,n);
  Poisk(g,n);
  getch();
}

Решение задачи: «Нахождение кратчайшего цикла в графе»

textual
Листинг программы
int g[N][N];

Объяснение кода листинга программы

  1. Объявляется двумерный массив g размером NxN.
  2. Инициализируются значения элементов массива g.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы