借鉴“皇后之美”

作者在 2013-08-24 11:03:40 发布以下内容

八皇后是经典之作,近再读,想起一老题(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>
char A[6];
char a[6]={'a','b','c','d','e','F'};

int isok(int n)//分析A[]第N个数与前面的数比较为递归 作准备。 
{
    int flag=1,i;
    if(A[0]=='a') flag=0;
   
    for(i=0;i<n;i++){
      if(A[n]==A[i])  flag=0;//不与前面已选择的数相同 
       }
         
       if(A[n]=='a' && A[n-1]=='b')  flag=1; 
       if(A[n]=='b' && A[n-1]=='a' ) flag=1;
    
       if(A[n]=='d' && A[n-1]!='c' ) flag=0;
       if(A[n]=='b' && A[n-2]!='e' ) flag=0; 
       if(A[n]=='c' && A[n-4]!='F' ) flag=0; 
    return flag;
}


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 ;
   }
    
       for(j=0;j<6;j++)
      {
        A[n]=a[j];
        if(isok(n) ) ok(n+1);
      }
  }
  
  int main()
  {
      ok(0);
      return 0;
  }

数据结构及算法 | 阅读 2157 次
文章评论,共0条
游客请输入验证码
浏览233247次
最新评论