有参考:琴空 http://blog.csdn.net/lencle/article/details/7206072
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int dataProcess(int a[101][101], int sum, int x[], int y[],int b[], int n, int m){
int temp = 1;
int l,k;
for (int i = 0; i < sum; i++) {
l = x[i]; k = y[i];
while ( 0 < l && a[l - 1][k] == 1) {//for left
temp++;
l--;
}
l = x[i]; k = y[i];
while (l < n-1 && a[l + 1][k] == 1) {//for right
temp++;
l++;
}
l = x[i]; k = y[i];
while ( k < m-1 && a[l][k + 1] == 1) {//for up
temp++;
k++;
}
l = x[i]; k = y[i];
while ( 0 < k && a[l][k - 1] == 1) {//for down
temp++;
k--;
}
b[i] = temp;
temp = 1;
}
return 0;
}
int main(){
int t = 0;
int a[101][101];//点坐标
int n, m, sum;//列 行 点数目
n = m = sum = 0;
int x[101], y[101], b1[10100], b2[10100];//横坐标 纵坐标 点联通度
int v = 0;
int ans[101];
memset(a, 0, sizeof(a));
memset(b1, 0, sizeof(b1));
memset(b2, 0, sizeof(b2));
scanf("%d", &t);
for (int j = 0; j < t; j++) {
scanf("%d %d %d", &n, &m, &sum);
for (int i = 0; i < sum; i++) {//图一
scanf("%d %d", &x[i], &y[i]);
a[x[i]][y[i]] = 1;
}
dataProcess(a, sum, x, y, b1, n, m);
memset(a, 0, sizeof(a));
memset(x, 0, sizeof(x));
memset(y, 0, sizeof(y));
for (int i = 0; i < sum; i++) {//图二
scanf("%d %d", &x[i], &y[i]);
a[x[i]][y[i]] = 1;
}
dataProcess(a, sum, x, y, b2, n, m);
sort(b1, b1+sum);
sort(b2, b2+sum);
for (int i = 0; i < sum; i++) {
if (b1[i] != b2[i]) {
ans[j] = 0;
v = 1;
break;
}
}
if(v == 0) ans[j] = 1;
}
for (int i = 0; i < t; i++) {
if (ans[i] == 0) printf("NO\n");
else printf("YES\n");
}
return 0;
}