#include<stdio.h>
#include<stdlib.h>
/*      Program za implementaciju varsalovog algoritma       */
/*      Ova verzija koristi staticku dekleraciju matrice     */
/*      kojom je zadata relacija.                            */
/*      Sa ulaza se unose parovi koji su u relaciji sve      */
/*      dok se ne unese par kod koga je bar jedan elemant 0  */
/*      sto predstavlja kraj unosa                           */

int relacija[100][100]={0};             //matrica relacije sa pocetnim vrednostima
int i,j,k,l=0;                          //brojaci i pomocne promenjlive
char ulaz[15];

void main ()

{

// unos matrice relacije
printf ("Unose se parovi koji su u relaciji u obliku: element1 element2 <enter>. \nKraj unosa predstavlja par u kome je bar jedan element 0\n");
scanf( "%d %d", &i, &j);
while ((i*j)!=0)
{
l=max(l,i);                             //posto broj elemenata nije unapred poznat
l=max(l,j);                             //l ce predstavljati broj elemenata i racuna se u hodu
relacija[i][j]=1;
k=scanf ("%d %d",&i,&j);
}
// kraj unosa matrice relacije

// u matrici su jedinice na mestima elemenata koji su u relaciji
// a promenljiva l sadrzi dimenziju sistema

// stampanje ulazne matrice relacije


printf("Pocetna relacija:\n");

for (i=1;i<=l;i++)
	{
	for (j=1;j<=l;j++)
		{
		if (relacija[i][j]==1) {printf("( %d - %d )\n",i,j);}
		}
	}



// Varsalov algoritam
for (i=1;i<=l;i++)
	{
	for (j=1;j<=l;j++)
		{
		for (k=1;k<=l;k++)
		       {
		       if (relacija[j][k]!=1)
				{
				relacija[j][k]=relacija[j][i]*relacija[i][k];
				}
		       }
		}
	}

// stampanje matrice tranzitivnog zatvorenja relacije


printf("Tranzitivno zatvorenje je:\n");

for (i=1;i<=l;i++)
	{
	for (j=1;j<=l;j++)
		{
		if (relacija[i][j]==1) {printf("( %d - %d )\n",i,j);}
		}
	}
}



