您的位置:首页 > 其它

算法-并查集-基于hdu1232

2016-08-06 15:58 302 查看
下面是代码

#include<iostream>
using namespace std;

int RoadNum[1005];

int Find(int A)
{
if(RoadNum[A]== A)
return A;
else
return Find(RoadNum[A]);
}

void SetIn(int A, int B)
{
int SetA= Find(A);
int SetB= Find(B);
if(SetA != SetB)
RoadNum[SetA]= SetB;
}

int main()
{
int CitySum;
int RoadSum;
int CityA, CityB;
int i, j;
int Sum;

while(cin>> CitySum && CitySum)
{
Sum= 0;

cin>> RoadSum;

for(j= 1; j<= CitySum; j++)
{
RoadNum[j]= j;
}

for(i= 0; i< RoadSum; i++)
{
cin>> CityA>> CityB;
SetIn(CityA, CityB);
}

for(i= 1; i<= CitySum; i++)
{
if(RoadNum[i] == i)
Sum ++;
}

cout<< Sum-1<< endl;

}

return 0;
}
并查集么,字面上的意思一个是并,一个是查,并是将每个有道路联通的城镇归到一个集合上,代码上的函数SetIn就是,查是找每一个城镇的父城镇,最后计算城镇的父城镇是自己本身的数量减一就ok了,就相当于一个父城镇下辖的几个子城镇被道路连成一块,求缺少的道路就是讲这几块连到一起,所以减一。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: