题目大义,是给出一些朋友关系, 问是不是可以分为两组,使每一个人在另一个组中都有朋友 //此题在算法导论课后题上其实是有类似题目的. //BFS, 按照产生层次来划定类别,比如d[u]为奇则进入第一组,为偶则进入第二组 #include <iostream> #include <queue> using namespace std; #define Rep(k,i,j) for(k=i;k<j;k++) int a[110][110],state[110]; int main() { queue<int> myqueue; int n,i,j; cin>>n; Rep(i,1,n+1){ state[i]=-1; Rep(j,1,n+1) a[i][j]=0; } Rep(i,1,n+1) { while (true) { cin>>j; if (j==0) break; else a[i][j] =1; } } Rep(i,1,n+1) { if (state[i]==-1) { state[i] =0; myqueue.push(i); while (!myqueue.empty()) { int cur = myqueue.front(); myqueue.pop(); Rep(j,1,n+1) if (a[i][j] && state[j]==-1) { state[j]=1-state[i]; myqueue.push(j); } } } } int count=0; Rep(i,1,n+1) if (state[i]==1) count++; cout<<count<<endl; Rep(i,1,n+1) { if (state[i]) cout<<i<<" "; } return 0; }