C++ で無向グラフのグループ数を数えたかったのですが、bfs を使用しようとしましたが、うまくいきませんでした。数値の範囲 [L,R] (またはこれらの範囲を頂点の数と考えてください) が与えられました。グループの数を見つける必要があります。これを行うにはどうすればよいですか?
私が持っている場合のように(入力):
1 3
2 5
6 9
出力:
2
2グループなので。
私のコード:
bool visited[MAX];
vector<int> v[MAX];
int solve(int x)
{
queue<int> q;int ans=0;
q.push(x);
if(v[x].empty())
{
ans++;
}
while(!q.empty())
{
int curr = q.front();
visited[curr] = true;
q.pop();
for(int i = 0; i < v[curr].size(); i ++)
{
if(!visited[v[curr][i]])
{
q.push(v[curr][i]);
visited[v[curr][i]] = true;
}
}
if(v[curr].empty()) ans++;
}
return ans;
}
int main()
{
int t;scanf("%d",&t);
while(t--)
{
int l,r,n,ans=0,min_,max_=0;
scanf("%d",&n);
for(int i = 0; i < n; i ++)
visited[i] = false;
for(int j=0;j<n;j++)
{
scanf("%d",&l);scanf("%d",&r);
for(int i=l;i<r;i++)
{
v[i].push_back(i+1);
min_ = min(min_,i);
max_ = max(max_,i+1);
}
}
printf("%d\n",solve(min_));
}
return 0;
}