Скачиваний:
10
Добавлен:
01.05.2014
Размер:
2.38 Кб
Скачать
//=== „Ґ¬®­бва жЁ®­­ п Їа®Ја ¬¬ : ®влбЄ ­ЁҐ Є®¬Ї®­Ґ­в ¤ўгбўп§­®бвЁ ===
#include  <stdio.h>
#include  <conio.h>
#include  <stdlib.h>
#include  <string.h>

struct VV { int d;
	     VV * next;
	  };

VV * LIST[100];
int NUM[100], L[100], num=0, STACK[100], ust=0, n=0, m=0 ;

void DBL (int v, int p)
{ VV * u;
  int e1, e2;
  NUM[v] = L[v] = ++num;
  for (u = LIST[v]; u ; u = u->next)
  { if(NUM[u->d] == 0)
    { STACK[ust++] = u->d; STACK[ust++] = v;
printf("\nst1:"); for(int i=0; i<ust; i++) printf("%2d",STACK[i]); getch();
      DBL(u->d, v);
      L[v] = L[u->d]<L[v]?L[u->d]:L[v];
      if(L[u->d] >= NUM[v])
      {
printf("\nNUM="); for(i=0; i<n; i++) printf(" %2d", NUM[i]);
printf("\n  L="); for(i=0; i<n; i++) printf(" %2d", L[i]);
	printf("\n<%2d,%2d>[", v, u->d);
	do {
	  e1 = STACK[--ust];
	  e2 = STACK[--ust];
	  printf ("%d,%d;", e1, e2);
	  } while (((e1 != v)||(e2 != u->d))&&(ust));
	printf("]");
printf("\nst3:"); for(i=0; i<ust; i++) printf("%2d",STACK[i]); getch();

      }
    }
    else if ((u->d != p)&&(NUM[u->d] < NUM[v]))
    { STACK[ust++] = u->d; STACK[ust++] = v;
printf("\nst2:"); for(int i=0; i<ust; i++) printf("%2d",STACK[i]); getch();
      L[v] = NUM[u->d]<L[v]? NUM[u->d] : L[v];
    }
  }
printf(" < %2d=%2d/%2d", v, NUM[v], L[v]);
}

void main()
{ int i, j, f, G[10][10];
  VV * v;
  char s[20];
  for(i=0; i<10; i++)
    for(j=0; j<10; j++) G[i][j] = 0;
  printf("\nDBL test ====================== (C)lgn, 10.10.03"
	 "\n ‚ўҐ¤ЁвҐ бЇЁбЄЁ ᬥ¦­®бвЁ...\n");
  do{
     printf( "v[%2d]=", n);
     gets(s);
     for (i=0; i<strlen(s); i++)
     { j = s[i] - '0';
       G[n][j] = G[j][n] = 1;
     }
     n++;
   } while((strlen(s))&&(n < 10));
  n=0;
  for(i=0; i<10; i++)
  { LIST[i] = 0;
    G[i][i] = 0;
    f = 0;
    printf("\n%2d:", i);
    for (j=0; j<10; j++)
     if(G[i][j])
     { f++;
       v = new VV;
       v->d = j; v->next = LIST[i]; LIST[i] = v;
       printf(" %2d", j);
     }
     else printf("  -");
     if(f) n++;
     m+=f;
  }
  printf("\n|V|=%2d, |E|=%2d", n, m/2);

  for(i=0; i<n; i++) NUM[i] = 0;
  for(i=0; i<n; i++) if(NUM[i] == 0) DBL(i, -1);

  printf("\nNUM="); for(i=0; i<n; i++) printf(" %2d", NUM[i]);
  printf("\n  L="); for(i=0; i<n; i++) printf(" %2d", L[i]);
  printf("\n ===== The End =====\n"); getch();
}
Соседние файлы в папке Демонстрационные примеры к курсовой по СиАОД