#include<stdio.h> #define MAX 99 void eulera(int c, int *su, int *tx){ int jest=1, koniec=0, x=2, k, alfa=0; while(koniec != 1){ if(*(tx+jest*MAX+x) != 0) { for(k=1; k<=c; k++){ if(*(tx+jest*MAX+k) != 0){ if(alfa > *(su+k)){ x=alfa; } else { x=k; alfa=*(su+k); } } else { x=x; k++; } } } else { if(jest > c){ koniec=1; printf("KONIEC\n"); } else { if(x==c){ x=0; jest++; koniec=1; printf("NIE MA DALSZEGO PRZEJSCIA\n"); } else { x++; } } } if(*(tx+jest*MAX+x) != 0){ printf(" %d - %d : ok \n", jest, x); *(tx+jest*MAX+x) = 0; *(tx+x*MAX+jest) = 0; *(su+jest) = *(su+jest) - 1; jest=x; x=1; alfa=0; } } } void zerowanie(int *tab, int *sumaa){ int i,y; for(i=0; i<99; i++){ *(sumaa+i) = 0; for(y=0; y<99; y++){ *(tab+i*10+y)=0; } } } int max(int x, int *y){ int i, maxi; maxi= *(y+1); for(i=2; i<=x; i++){ if(*(y+i) > maxi){ /* Wyszukanie najwiekszego stopnia wierzcholka */ maxi=*(y+i); } /* Stopien grafu */ else { maxi=maxi; } } return maxi; } main(){ int t[MAX][MAX]; int suma[MAX]; int i, punkty, y, a, s, po; int *tab; int *sumaa; tab = &t[0][0]; sumaa = &suma[0]; zerowanie(tab, sumaa); printf("Ile graf posiada wierzchokow ?\n"); scanf("%d", &punkty); for(i=1; i<=punkty; i++){ printf("0 = EOF || Wierzcholek %d laczy sie z : \n", i); for(y=1; y<=90; y++){; scanf("%d", &po); if(po==0) { y=92; } else { t[i][po]=1; t[po][i]=1; if(i==po){ printf("Blad? M[i,j] / i = j = 1 !"); goto exi; } } } } printf("\n\nMacierz:\n\n"); for(a=1; a<=punkty; a++){ printf("|"); for(s=1; s<=punkty; s++){ suma[a]=suma[a]+t[a][s]; printf("%d ", *(tab+a*MAX+s)); /* drukuj macierz*/ if(s==punkty){ printf("|\n"); } } } printf("\n"); for(i=1; i<=punkty; i++){ printf("Stopien wierzcholka %d = %d \n", i, *(sumaa+i)); } printf("\nStopien Grafu = %d\n\n", max(punkty, sumaa)); eulera(punkty, sumaa, tab); printf("\n\n"); for(a=1; a<=punkty; a++){ printf("| "); for(s=1; s<=punkty; s++){ suma[90]=suma[90]+t[a][s]; printf("%d ", *(tab+a*MAX+s)); /* drukuj macierz*/ if(s==punkty){ printf("|\n"); } } } if(suma[90] == 0) { printf("\nGRAF JEST EULEROWSKI\n"); } else { printf("\nGRAF NIE JEST EULEROWSKI\n"); } exi: getchar(); return 0; }