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

 

你可能感兴趣的:(HDU)