每天一道算法题(37)——360校招机试之寻找同乡
题目:
输如若干行,第一行输入人的个数n和存在同乡关系的对数m。后面紧接着是m行(m<n(n-1)/2)这些同乡关系对。判断编号为1的人有多少个同乡。给出n组这样的关系式,判断同乡个数。
代码:
#include <iostream> #include <string> #include<vector> using namespace std; void process(int n,int g,vector<int> &v){ int* flag=new int[n+1]; for(int i=0;i<n+1;i++) flag[i]=i; int p1,p2; int temp; for(int i=0;i<g;i++){ cin>>p1>>p2; if(flag[p1]==1&&flag[p2]!=1){ temp=flag[p2]; for(int j=0;j<n+1;j++) if(flag[j]==temp) flag[j]=1; } else if(flag[p2]==1&&flag[p1]!=1){ temp=flag[p1]; for(int k=0;k<n+1;k++) if(flag[k]==temp) flag[k]=1; } else flag[p1]=flag[p2]; } int num=0; for(int i=0;i<n+1;i++){ if(i!=1&&flag[i]==1) num++; } v.push_back(num); delete []flag; } int main(void) { int n,g; vector<int> v; cin>>n>>g; while(!(n==0&&g==0)){ process(n,g,v); cin>>n>>g; } for(int i=0;i<v.size();i++) cout<<v[i]<<endl; }