
正文
hdu 4739 Zhuge Liang's Mines
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
一个简单的搜索题,唉……
当时脑子抽了,没做出来啊……
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
struct node
{
int x,y;
}p[];
int ans,now,n;
bool f[];
void dfs(int m)
{
if(m>=n){
if(now>ans) ans=now;
return ;
}
dfs(m+);
if(!f[m]){
for(int i=m+;i<n;i++)
if(!f[i]&&abs(p[i].x-p[m].x)==abs(p[i].y-p[m].y)&&p[i].x-p[m].x!=){
for(int j=m+;j<n;j++)
for(int k=m+;k<n;k++){
if(i==j||i==k||j==k||f[j]||f[k]) continue;
if((p[j].x==p[i].x&&p[j].y==p[m].y&&p[k].x==p[m].x&&p[k].y==p[i].y)||(p[k].x==p[i].x&&p[k].y==p[m].y&&p[j].x==p[m].x&&p[j].y==p[i].y)){
f[i]=f[j]=f[k]=f[m]=;
now+=;
dfs(m+);
f[i]=f[j]=f[k]=f[m]=;
now-=;
}
}
}
}
}
int main()
{
while(scanf("%d",&n)){
if(n==-) break;
for(int i=;i<n;i++) scanf("%d %d",&p[i].x,&p[i].y);
ans=now=;
memset(f,,sizeof(f));
dfs();
printf("%d\n",ans);
}
return ;
}







