Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
//=== ===
#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();
}