Скачиваний:
10
Добавлен:
01.05.2014
Размер:
2.15 Кб
Скачать
//===  ===
#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 FND(int v)
{ VV * u;

  NUM[v] = L[v] = ++num;
  STACK[ust++] = v;
printf("\nst1:"); for(int i=0; i<ust; i++) printf("%2d",STACK[i]); getch();
  for (u = LIST[v]; u ; u = u->next)
  { if(NUM[u->d] == 0)
    { FND(u->d);
      L[v] = L[u->d]<L[v]? L[u->d] : L[v];
    }
    else if (NUM[u->d] < NUM[v])
    { for(int i=0, f=0; i<ust; i++) if (STACK[i] == u->d) f = 1;
      if(f) L[v] = NUM[u->d]<L[v]? NUM[u->d] : L[v];
    }
  }
  if(L[v] == NUM[v])
  { int x;
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>[", v);
	do {
	  x = STACK[--ust];
	  printf ("%d,", x);
	  } while ((x != v)&&(ust));
	printf("]");
printf("\nst2:"); for(i=0; i<ust; i++) printf("%2d",STACK[i]); getch();
   }
else 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("\nFND 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) FND(i);

  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();
}
Соседние файлы в папке Демонстрационные примеры к курсовой по СиАОД