sdut2405Strange Square

参考着cz的写的

判重问题 :保存每一层的找过的节点 再在这一层找的时候 要保证与之前没有相同的

View Code
 1 #include<stdio.h>

 2 #include<string.h>

 3 long count,f[11],s,x[11],a[11];

 4 void dfs(long v)

 5 {

 6     long j,flag = 0,g,w,q[11];    

 7     if(v>9)

 8     {    

 9         if(x[1]+x[2]+x[3]==x[4]+x[5]+x[6]&&x[4]+x[5]+x[6]==x[7]+x[8]+x[9]&&x[1]+x[4]+x[7]==x[2]+x[5]+x[8]&&x[2]+x[5]+x[8]==x[3]+x[6]+x[9])    

10                 count++;

11         return ;

12     }

13     if(v>6)

14     {

15         if(x[1]+x[2]+x[3]!=x[4]+x[5]+x[6])

16             return;

17     }

18     if(v ==9)

19     {

20         if(x[1]+x[4]+x[7]!=x[2]+x[5]+x[8])

21             return;

22     }

23     w = 1;

24     for(j = 1 ; j <= 9 ; j++)

25     {

26         flag = 1;

27         for(g = 1 ; g < w ; g++)

28             if(a[j] == q[g])

29             {

30                 flag = 0;

31                 break;

32             }

33         if(f[j]==0&&flag)

34         {

35             f[j] = 1;            

36             x[v] = a[j];

37             q[w] = a[j];

38             w++;

39             dfs(v+1);

40             f[j] = 0;            

41         }

42     }

43 

44 }

45 int main()

46 {

47     long i,k = 0,t;

48     scanf("%ld", &t);

49     while(t--)

50     {

51         k++;

52         memset(f,0,sizeof(f));

53         count = 0;

54         for(i = 1; i <= 9;  i++)

55             scanf("%ld",&a[i]);

56         printf("Case %ld: ",k);

57         dfs(1);

58         printf("%ld\n",count);

59     }

60     return 0;

61 }

 

你可能感兴趣的:(du)