注解
1、定义Point结构体,排序。先按x升序再按y升序排序。同时结构体中含有flag作为访问标记
2、定义visited变量表示访问过的点的个数。当visited=n时,循环结束。
3、排序后,一轮循环按排序顺序,当前元素未访问过,并且x和y均大于等于之前元素时,就访问。visited++
代码
#include <iostream>
#include <algorithm>
using namespace std;
struct Point{
int x;
int y;
int flag;
};
int compare(Point p1, Point p2){
if(p1.x!=p2.x){
return p1.x<p2.x;
}
else{
return p1.y<p2.y;
}
}
int main() {
int T;
cin>>T;
for(int i=0; i<T; i++) {
int n;
cin>>n;
Point p[n];
for(int j=0; j<n; j++){
cin>>p[j].x>>p[j].y;
p[j].flag = 0;
}
sort(p, p+n, compare);
int cnt = 0;
int visited = 0;
while(visited<n){
cnt++;
Point tmp;
tmp.x = 0;
tmp.y = 0;
for(int j=0; j<n; j++){
if(p[j].flag==0 && p[j].x>=tmp.x && p[j].y>=tmp.y){
tmp.x = p[j].x;
tmp.y = p[j].y;
p[j].flag = 1;
visited++;
}
}
}
cout<<cnt<<endl;
}
return 0;
}