借鉴“皇后之美”

数据结构及算法 | 2013-08-24 11:03:40 | 阅读 1623 次 | 评论(0)

八皇后是经典之作,近再读,想起一老题(http://bbs.bccn.net/thread-382842-1-1.html),借用此法。与B 版有异曲同工之妙。

一个排序问题求解
全班同学排成 6 排, A 、 B 、 C 、 D 、 E 、 F 等 6 人分别站在第 1 排到第 6 排 • 用 6 个 int 变量表示 A — F 的位置 – 

A 不在第 1 排 à a != 1

A 与 B 前后相邻  (a == b + 1) || (a == b - 1) 

C 在 D 前面 c == d - 1 

E 在 B 的前两排  e == b - 2  

C 在 F 后的第 4 排  c == f + 4 

怎么让输出结果是f e a b c d 啊
因我不想用索引,故把'F ' 代替 'f'




#include<stdio.h>
#include<stdlib.h>
char A[6];
char a[6]={'a','b','c','d','e','F'};
int isok(int n)//分析A[]第N个数与前面的数比较为递归 作准备。 
{
    int flat=1,i;
    if(A[0]=='a') flat=0;
   for(i=0;i<n;i++)
    {
      if(A[n]==A[i]) flat=0;//不与前面已选择的数相同 
       if(A[i]=='a' &&!(A[i+1]=='b' ||A[i-1]=='b'))  flat=0;//感觉A[i+1] 还有点问题, 
       if(A[i]=='d' && A[i-1]!='c' ) flat=0;
        if(A[i]=='b' && A[i-2]!='e' ) flat=0; 
      if(A[i]=='c' && A[i-4]!='F' ) flat=0; 
                
    }
    return flat;
}


void output()
{
     int i;
     for(i=0; i<6;i++)
     printf("%2c",A[i]);
     printf("\n");
 }
 

 void ok(int n)
 {
      int j;
      if(n==6)
   {
       output();
   return ;
   }
    //return   output();感觉奇怪在DEV5中能运行
     
      
       for(j=0;j<6;j++)
      {
      A[n]=a[j];
      if(isok(n) ) ok(n+1);
      }
  }
  
  int main()
  {
      ok(0);
      system("pause");
      return 0;
  }


文章评论,共0条
游客请输入验证码
浏览176454次
最新评论
  • zhouwenyuan:博主可以开发房产APP吗?
  • qunxingw:结合附件,在分表A或B...实验一下宏就理解了
  • qunxingw:这仅是小范围的一种思路,此题是指数级的数据。