Pagini recente » Cod sursa (job #1819810) | Cod sursa (job #1121865) | Cod sursa (job #2203270) | Cod sursa (job #186275) | Cod sursa (job #942405)
Cod sursa(job #942405)
#include<iostream>
#include<vector>
#include<fstream>
#define MAX 100000
#define MAX_comp 4000
using namespace std;
ifstream in("ctc.in");
ofstream out("ctc.out");
int nod_plecare,nr_comp_conexe=0;
vector <int> graf[MAX],comp_conexe[MAX_comp];
int ctc( int nod ,int viz[MAX]){
int i,gasire,j,k;
cout<<"viz="<<viz[nod]<<" "<<viz[nod-1];
viz[nod]=1;
for ( i = 0; i < graf[nod].size(); i++ )
if((nod!=graf[nod][i])&&(graf[nod][i]==nod_plecare)){
comp_conexe[nr_comp_conexe].push_back(nod);
return 1;
}
else
if(viz[graf[nod][i]]==0){
gasire=ctc(graf[nod][i],viz);
if(gasire==1){
//for( j = 0 ; j < nr_comp_conexe; j++ )
//for( k = 0 ; k < comp_conexe[j].size(); k++ )
//if(comp_conexe[j][k]==i)
comp_conexe[nr_comp_conexe].push_back(nod);
return 1;
}
}
return 0;
}
void afisare(){
unsigned int i;
int j;
out<<nr_comp_conexe<<endl;
for( j = 0 ; j < nr_comp_conexe ; j++ ){
for( i = 0; i < comp_conexe[j].size(); i++)
out<<comp_conexe[j][i]<<" ";
out<<endl;
}
}
int reuniune(){
int i,j,k,ok,ok1,nr_comp_conexe1,p;
nr_comp_conexe1=nr_comp_conexe;
for(p = 0 ; p < nr_comp_conexe1 ; p++)
for( i = 0 ; i < nr_comp_conexe1; i++){
ok=0;
for( j = 0 ; j < comp_conexe[i].size(); j++ )
for( k = 0 ; k < comp_conexe[i+1].size() ; k++ )
if(comp_conexe[i][j]==comp_conexe[i+1][k])
ok++;
if(ok!=0){
for( j = 0 ; j < comp_conexe[i+1].size(); j++ ){
ok1=0;
for( k = 0 ; k < comp_conexe[i].size() ; k++ )
if(comp_conexe[i+1][j]==comp_conexe[i][k])
ok1++;
if(ok1==0)
comp_conexe[i].push_back(comp_conexe[i+1][j]);
}
comp_conexe[i+1].clear();
nr_comp_conexe1--;
}
}
return nr_comp_conexe1;
}
int main(){
int n,m,x,y,viz[10],exista,ok,i,j,k,p;
in>>n>>m;
for( i = 1; i <= m; i++){
in>>x>>y;
graf[x].push_back(y);
}
for( i = 1 ; i <= n ; i++)
viz[i]=0;
for( i = 1 ; i <= n ; i++ ){
exista=0;
for( p = 1 ; p <= n ; p++){
viz[p]=0;
}
cout<<endl;
for( j = 0 ; j < nr_comp_conexe; j++ )
for( k = 0 ; k < comp_conexe[j].size(); k++ )
if(comp_conexe[j][k]==i)
exista=1;
cout<<"i="<<i<<" exista="<<exista<<endl;
if(exista==0){
nod_plecare=i;
ok=ctc(i,viz);
if(ok==1){
nr_comp_conexe++;
}
}
}
nr_comp_conexe=reuniune();
afisare();
return 0;
}