Добавил:
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 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();
}