Cod sursa(job #2628522)

Utilizator MihaiutcnStancu Mihai Cristian Mihaiutcn Data 16 iunie 2020 11:21:45
Problema Sortare topologica Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.94 kb
#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.