Ngoài cách duyệt như thầy thì có thể dùng kĩ thuật find and join để làm nhé. Chúc các bạn học tốt
Full code
#include <iostream>
#include <fstream>
#include <string.h>
#include <Queue>
#include <Stack>
using namespace std;
int n,m;
int a[100][100];
int g[100];
int goc(int i)
{
return g[i];
}
void setgoc(int x,int y)
{
if ( goc(x) > goc(y) )
g[x] = goc(y);
else
g[y] = goc(x);
}
void docfile()
{
int x,y;
memset(a,0,sizeof(a));
ifstream fi("data.inp");
fi>>n>>m;
for ( int i=1;i<=n;i++)
g[i] =i;
for ( int i=1; i<=m;i++)
{
fi>>x>>y;
a[x][y] = a[y][x] =1;
setgoc(x,y);
}
}
int kiemtra()
{
int dem=0;
for ( int i=1;i<=n;i++)
if (goc(i) == i)
dem++;
return dem;
}
int main()
{
docfile();
cout<<"\nso cau can xay :"<<kiemtra()-1;
}