hdu 4739 DFS

来源:互联网 发布:网络犯罪的概念和特征 编辑:程序博客网 时间:2024/06/05 15:15

暴力搜索。。。。。。。其实可以直接排序后找多少组正方形就可以。。。。但是不知道为什么,不知道是数据弱还是怎么的。。。。

AC代码如下:

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAX_SIZE 120typedef struct{int x, y;}Point;int number[MAX_SIZE][MAX_SIZE];int N;Point p[30];int DFS(){int ans = 0;for( int i = 0; i < N; i++ ){if( number[p[i].x][p[i].y] > 0 ){for( int j = i; j < N; j++ ){if( number[p[j].x][p[j].y] > 0 && p[i].x != p[j].x && p[i].y != p[j].y && ( p[i].x - p[j].x == p[i].y - p[j].y ) ){if( number[p[i].x][p[j].y] > 0 && number[p[j].x][p[i].y] > 0 ){number[p[i].x][p[i].y]--;number[p[j].x][p[j].y]--;number[p[i].x][p[j].y]--;number[p[j].x][p[i].y]--;ans = max( ans, DFS() + 1 );number[p[i].x][p[i].y]++;number[p[j].x][p[j].y]++;number[p[i].x][p[j].y]++;number[p[j].x][p[i].y]++;}}}}}return ans;}int main(){while( cin >> N ){if( N == -1 ){break;}memset( number, 0, sizeof( number ) );for( int i = 0; i < N; i++ ){cin >> p[i].x >> p[i].y;number[p[i].x][p[i].y]++;}cout << DFS() * 4 << endl;}return 0;}