Pagini recente » Cod sursa (job #1309475) | Cod sursa (job #1861154) | Cod sursa (job #2589736) | Cod sursa (job #3296599) | Cod sursa (job #2628522)
#include <stdio.h>
#include <stdlib.h>
void citire(int a[5][5],FILE *f)
{
int i,j;
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
fscanf(f,"%d",&a[i][j]);
}
}
}
void indegree(int a[5][5],int in[5])
{
int i,j,cnt=0;
int k=0;
for(j=0; j<5; j++)
{
for(i=0; i<5; i++)
{
if(a[i][j]==1)
cnt++;
}
if(in[k]!=100)
{
in[k]=cnt;
}
cnt=0;
k++;
}
}
int pickstart(int in[5],int start)
{
int i;
for(i=0; i<5; i++)
{
if(in[i]==0 && in[i]!=100)
{
start=i;
break;
}
}
return start;
}
void afisarein(int in[5],FILE *g)
{
int i;
for(i=0; i<5; i++)
{
fprintf(g,"%d ",in[i]);
}
}
void topological(int a[5][5],int in[5],int top[5])
{
int i,j,start,stop=4;
int cnt=0;
while(cnt<=stop)
{
indegree(a,in);
start=pickstart(in,start);
top[cnt]=start+1;
cnt++;
i=start;
for(j=0; j<5; j++)
{
a[i][j]=0;
}
in[start]=100;
}
}
int main()
{
FILE *f=fopen("sortaret.in","r");
FILE *g=fopen("sortaret.out","w");
if(f==NULL)
{
perror("Eroare\n");
}
int a[5][5];
citire(a,f);
fclose(f);
int in[5];
int* top=calloc(5,sizeof(int));
topological(a,in,top);
afisarein(top,g);
return 0;
}
/// Mai intai imi citesc matricea de adiacenta, apoi imi formez vectorul de indegree si vad care e primul nod cu indegree=0,acela va fi start;
/// Apoi pe linia start a matricei pun 0 peste tot pentru a putea updata vectorul de indegree la fiecare pas al buclei while.In timp ce se deruleaza
/// whileul, se umple vectorul top(topologic), la final continutul sau avand una dintre sortarile topologice posibile.