一个简单的搜索题,唉……
当时脑子抽了,没做出来啊……
代码如下:
1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 #include<iomanip> 5 #include<cmath> 6 #include<cstring> 7 #include<vector> 8 using namespace std; 9 struct node 10 { 11 int x,y; 12 }p[30]; 13 int ans,now,n; 14 bool f[30]; 15 void dfs(int m) 16 { 17 if(m>=n){ 18 if(now>ans) ans=now; 19 return ; 20 } 21 dfs(m+1); 22 if(!f[m]){ 23 for(int i=m+1;i<n;i++) 24 if(!f[i]&&abs(p[i].x-p[m].x)==abs(p[i].y-p[m].y)&&p[i].x-p[m].x!=0){ 25 for(int j=m+1;j<n;j++) 26 for(int k=m+1;k<n;k++){ 27 if(i==j||i==k||j==k||f[j]||f[k]) continue; 28 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)){ 29 f[i]=f[j]=f[k]=f[m]=1; 30 now+=4; 31 dfs(m+1); 32 f[i]=f[j]=f[k]=f[m]=0; 33 now-=4; 34 } 35 } 36 } 37 } 38 } 39 int main() 40 { 41 while(scanf("%d",&n)){ 42 if(n==-1) break; 43 for(int i=0;i<n;i++) scanf("%d %d",&p[i].x,&p[i].y); 44 ans=now=0; 45 memset(f,0,sizeof(f)); 46 dfs(0); 47 printf("%d ",ans); 48 } 49 return 0; 50 }