八皇后问题精炼代码

#include<iostream>

#include<math.h>

#include<ctype.h>

using namespace std;

int num=0;

void queen(int n)

int j,i,k,*p;

 p=new int[n]; 

for(i=0;i<n;i++)//初始化 

 p[i]=0; i=0; 

   cout<<endl; 

   cout<<"the "<<n<<" queen problem all result:"<<endl;

 while(1) 

{  if(p[i]<n)//有皇后可调整 

    {   k=0;   

           while((k<i)&&((p[k]-p[i])&&(fabs(p[k]-p[i])-fabs(k-i)))!=0)    

             k=k+1;  

               if(k<i)          

                     p[i]=p[i]+1;  

               else   

                     {   

                           if(i==n-1)    

                                  {    

                                         num++; 

                                               for(j=0;j<n;j++)   

                                                     cout<<(p[j]+1);     

                                                        if(num%4!=0)        cout<<"    ";      

                                                          if(num%4==0)        cout<<endl;      

                                                       p[n-1]=p[n-1]+1;  

                                    }   

                           else    

                                 i=i+1;   

                      }    

               }  

              else            

                 {    

                      p[i]=0;    i=i-1;    

                         if(i<0)   

                                  {     cout<<endl;     delete []p;     break;    }   

                           p[i]=p[i]+1;

               }  

         }

       }

int main()

      int n;

      char c;

       do

            { 

                 cout<<"请输入多少皇后问题:"; 

                cin>>n;  

                 queen(n); 

                  cout<<"一共有几种:"<<num<<endl; 

                  num=0;    

                  cout<<"是否要查第n皇后?是就:y  否就: n"<<endl; 

                 }while(cin>>c,tolower(c)!='n');

        return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值