每天一道算法题(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;
} 


原文地址:https://www.cnblogs.com/engineerLF/p/5392964.html