Pagini recente » Cod sursa (job #2710156) | Cod sursa (job #2001841) | Cod sursa (job #2049987) | Cod sursa (job #1186754) | Cod sursa (job #466052)
Cod sursa(job #466052)
#include<fstream>
using namespace std;
struct nod{
int info;
nod *next;
};
int n,m,vizitat[100003],grad[100004],sol,gasit,first;
nod *g[100004];
void dfs1(int k);
void adauga(int a,int b);
ofstream fout("mesaj4.out");
void dfs2(int k);
int main()
{
ifstream fin("mesaj4.in");
fin>>n>>m;
int i;
for(i=1;i<=m;i++)
{
int x,y;
fin>>x>>y;
grad[x]++;
grad[y]++;
adauga(x,y);
adauga(y,x);
}
int cont=0;
for(i=1;i<=n;i++)
if(grad[i]==1)
first=i,cont++;
if(first!=0)
{
sol+=1+2*(cont-1)+(n-cont-1);
sol+=n-1;
fout<<sol<<endl;
dfs1(first);
}
else
{
fout<<2*(n-1)<<endl;
dfs1(1);
}
dfs2(gasit);
return 0;
}
void dfs1(int k)
{
vizitat[k]=1;
for(nod *p=g[k];p;p=p->next)
if(vizitat[p->info]==0)
{
gasit=p->info;
fout<<k<<" "<<p->info<<endl;
if(grad[p->info]==1 && p->info!=first)
fout<<p->info<<" "<<k<<endl;
dfs1(p->info);
}
}
void adauga(int a,int b)
{
nod *p=new nod;
p->info=b;
p->next=g[a];
g[a]=p;
}
void dfs2(int k)
{
vizitat[k]=0;
for(nod *p=g[k];p;p=p->next)
if(vizitat[p->info]==1)
{
fout<<k<<" "<<p->info<<endl;
dfs2(p->info);
}
}