Pagini recente » Cod sursa (job #1405196) | Cod sursa (job #157678) | Cod sursa (job #2052250) | Cod sursa (job #1684606) | Cod sursa (job #930917)
Cod sursa(job #930917)
#include "iostream"
#include "fstream"
#include "cstdlib"
#include "stack"
using namespace std;
ifstream in("sortaret.in");
ofstream out("sortaret.out");
stack<int> S;
void dfs(int sursa,int **a,int n,int *&viz)
{
viz[sursa] = 1;
for(int i = 1; i < n+1; i++)
{
if(!viz[i] && a[sursa][i])
dfs(i,a,n,viz);
}
S.push(sursa);
}
void sortT(int **a,int n)
{
int *viz = (int*)calloc(n+1,sizeof(int));
for(int i = 1; i < n+1; i++)
{
if(!viz[i])
dfs(i,a,n,viz);
}
}
void read(int **&a,int &n)
{
int nr;
in >> n >> nr;
// Alocare matrice
a = (int**)calloc(n+1,sizeof(int*));
for (int i = 0; i < n+1; ++i)
a[i] = (int*)calloc(n+1,sizeof(int));
for (int i = 0; i < n+1; ++i)
for (int j = 0; j < n+1; ++j)
a[i][j] = 0;
// Citire graf
for (int i = 0; i < nr; ++i)
{
int x,y;
in >> x >> y;
a[x][y] = 1;
}
}
void print(int **a,int n)
{
for (int i = 1; i < n+1; ++i) {
for (int j = 1; j < n+1; ++j)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
int main(int argc, char const *argv[])
{
int **a;
int n;
read(a,n);
print(a,n);
sortT(a,n);
cout<<"\n";
while(!S.empty())
{
out<<S.top()<<" ";
S.pop();
}
return 0;
}