题目链接:
本题题意:在坐标系上有n个点,给出n个点的坐标,然后只能竖直或者横向移动,问最少需要建立几个中间点才能够从一个点出发到达所有的点
这道题是联通块的题 ,最后求出联通块块数 - 1 就可以了!
也可以考虑并查集!
AC代码:
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 using namespace std;10 11 using namespace std;12 int n,x[101],y[101],vis[101];13 void dfs(int i)14 {15 vis[i]=1;16 for(int j=1;j<=n;j++)17 {18 if((x[j]==x[i]||y[j]==y[i])&&!vis[j])19 {20 dfs(j);21 }22 }23 }24 int main()25 {26 int ans=-1;27 scanf("%d",&n);28 for(int i=1;i<=n;i++)29 {30 scanf("%d%d",&x[i],&y[i]);31 }32 for(int i=1;i<=n;i++)33 {34 if(!vis[i])35 {36 dfs(i);37 ans++;38 }39 }40 printf("%d\n",ans);41 return 0;42 }43 44