Pagini recente » Cod sursa (job #498317) | Monitorul de evaluare | Istoria paginii runda/yur | Cod sursa (job #705714) | Cod sursa (job #1127092)
#include<iostream>
#include<fstream>
#include<limits.h>
using namespace std;
int a[1000][1000],n,m,v[1000][1000],z[1000],drum[1000],x,y,drumm[1000],minim=INT_MAX,aux;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
void citire()
{
fin>>n>>m;
int o,p;
for(int i=1;i<=m;i++)
{
fin>>o>>p;
a[o][p]=1;
v[o][p]=1;
}
}
void RW()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]==0)
a[i][j]=a[i][k]*a[k][j];
}
int cond(int i)
{
for(int j=1;j<i;j++)
if(drum[j]==drum[i])
return 0;
return 1;
}
void gen(int i)
{
for(int j=1;j<=n;j++)
{
drum[i]=j;
aux++;
if(v[drum[i-1]][drum[i]]==1)
if(cond(i))
{
if(drum[i]==y)
{
if(i<minim)
{
minim=i;
for(int g=1;g<=i;g++)
drumm[g]=drum[g];
}
}
else
{
gen(i+1);
}
}
}
}
int main()
{
citire();
RW();
int ok=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i][j]==0)
ok=0;
}
}
int x,nrc=0;
for(int k=1;k<=n;k++)
if(z[k]==0)
{
nrc++;
z[k]=nrc;
for(int j=1;j<=n;j++)
if(a[k][j] && a[j][k] && z[j]==0)
z[j]=nrc;
}
fout<<nrc<<"\n";
for(int i=1;i<=nrc;i++)
{
for(int j=1;j<=n;j++)
if(z[j]==i)
fout<<j<<" ";
fout<<'\n';
}
fin>>x>>y;
drum[1]=x;
gen(2);
}