hdu 4739 Zhuge Liang's Mines

一个简单的搜索题,唉……

当时脑子抽了,没做出来啊……

代码如下:

 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\n",ans);
48     }
49     return 0;
50 }
View Code

 

posted @ 2013-09-16 10:20  _随心所欲_  阅读(239)  评论(0编辑  收藏  举报