Pagini recente » Cod sursa (job #789785) | Cod sursa (job #1104120) | Cod sursa (job #2444393) | Cod sursa (job #163136) | Cod sursa (job #374375)
Cod sursa(job #374375)
using namespace std;
#include <fstream>
int a[256][256], v[256],t[256],level[256],n;
struct nod{
int info;
nod* next;
};
int ad[256][2],nrad;
void DFS(int k,int l){
level[k]=l;
for(int i=1;i<=n;i++){
if(v[i]==0 && level[i]==-1 && a[k][i]==1){
t[i]=k;
DFS(i,l+1);
}
}
}
int main(){
ifstream fin("strazi.in");
int m,i,j;
fin>>n>>m;
for( ; m ; --m){
fin>>i>>j;
a[i][j]=1;
}
nod * prim=NULL;
for(i=1;i<=n;i++)
if(v[i]==0){
for(j=1;j<=n;j++){
t[j]=-1;
if(v[j]==0)
level[j]=-1;
else
level[j]=0;
}
t[i]=0;
DFS(i,0);
int poz=1;
for(j=1;j<=n;j++)
if(level[j]>level[poz])
poz=j;
if(level[poz]==0)
poz=i;
if(prim){
nrad++;
ad[nrad][0]=poz;
ad[nrad][1]=prim->info;
}
while(poz){
v[poz]=1;
nod *pp=new nod;
pp->info=poz;
pp->next=prim;
prim=pp;
poz=t[poz];
}
}
ofstream fout("strazi.out");
fout<<nrad<<endl;
for(i=1;i<=nrad;++i)
fout<<ad[i][0]<<" "<<ad[i][1]<<endl;
while(prim){
fout<<prim->info<<" ";
prim=prim->next;
}
return 0;
}