Pagini recente » Cod sursa (job #2750247) | Cod sursa (job #1951211) | Cod sursa (job #1174586) | Cod sursa (job #255866) | Cod sursa (job #148750)
Cod sursa(job #148750)
#include<fstream>
using namespace std;
ifstream in("dfs.in"); //pe prima linie nr de noduri si vf de start, pe urmatoarele muchiile
ofstream out("dfs.out");
int c[20],k;
void citire(int mat[500][500],int &n)
{int i,j,m;
in>>n>>m;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
mat[i][j]=0;
for (i=0;i<m;i++)
{in>>i>>j;
mat[i-1][j-1]=mat[j-1][i-1]=1;
}
}
void afisare(int mat[500][500],int n)
{int i,j;
for (i=0;i<n;i++)
{for (j=0;j<n;j++)
out<<mat[i][j]<<" ";
out<<endl;
}
}
void bf(int mat[500][500],int n,int st)
{int s[20],i,j;
for (i=0;i<n;i++)
s[i]=c[i]=0;
i=0;k=1;
s[st]=1;
c[0]=st;
while (i<k)
{for (j=0;j<n;j++)
if (!s[j]&&mat[c[i]][j]) {c[k++]=j; s[j]=1;}
i++;
}
//if (k==n) out<<"Graful este conex";
// for (i=0;i<k;i++)
// out<<c[i]+1<<" ";
}
int main()
{int mat[500][500],n;
citire(mat,n);
// afisare(mat,n);
int s[20],i,j,nr=0;
for (i=0;i<n;i++)
s[i]=0;
for (i=0;i<n;i++)
{if (s[i]==0) {bf(mat,n,i); nr++;}
for (j=0;j<k;j++)
s[c[j]]=1;
}
out<<nr;
return 0;
}