题目链接:https://www.nowcoder.com/acm/contest/84/C

       任意两个点要是在同一行或者同一列的话不需要另外的点就能到,不同行且不同列的点只需要一个点,所以我的写法就是先按行排序,然后看需要加多少个点,然后这些点会包括列相同的点,所以再按列排序,减去这些列相同的点就好了。


AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
struct Node{
  int x,y;
}Edge[1005];
int n;
int num;

bool cmp1(Node a,Node b){
  return a.x < b.x;
}

bool cmp2(Node a,Node b){
  return a.y < b.y;
}

int main()
{
  scanf("%d",&n);
  for(int i=0;i<n;i++){
    scanf("%d%d",&Edge[i].x,&Edge[i].y);
  }
  num = 0;
  sort(Edge,Edge+n,cmp1);
  for(int i=0;i<n - 1;i++){
    if(Edge[i].x != Edge[i+1].x){
      num++;
    }
  }
  sort(Edge,Edge+n,cmp2);
  for(int i=0;i<n - 1;i++){
    if(Edge[i].y == Edge[i + 1].y){
      num--;
    }
  }
  printf("%d\n",num);
  return 0;
}