回 帖 发 新 帖 刷新版面

主题:N皇后问题::

N皇后问题::

typedef struct {
    int *elem;
}sqlisk;

void main()
{
int i,n,j,p,k,q=0;
  sqlisk l;
clrscr();
printf("Input the Queen is disk");
scanf("%d",&n);
l.elem=(int*)malloc((n+1)*sizeof(int));
for(i=1;i<=n+1;i++)
  l.elem[i]=1;
i=1;
while(1)
  {
   if (l.elem[i]<=n)
     {
       k=1;
       while ((k<=i-1)&&(l.elem[i]-l.elem[k])*(abs(l.elem[i]-l.elem[k])-abs(i-k))!=0)
 k++;
       if (k<=i-1)
 {
  l.elem[i]++;
  continue;
  }
       i++;
       if (i<=n) continue;
       clrscr();
       q++;
       printf("\n\n\n\n\n\n\n");
       printf("      The is number %d:\n\n",q);
       for (i=1;i<=n;i++)
{
 printf("\t\t\t\t");
 for (j=1;j<=n;j++)
   printf(". ");
 for (p=n;p>=(n+1-l.elem[i]);p--)
   printf("\b\b");
   printf("0\n");
 }
       getch();
       l.elem[n]++;
       i=n;
       continue;
      }
     else
   {
    l.elem[i]=1;
    i--;
    if (i<1) return;
    l.elem[i]++;
    continue;
    }
  }
}


回复列表 (共3个回复)

沙发

我只是说一点个人观点哈,
我看了你的一些程序,觉得程序最重要的不是技巧方面,而是让人能够容易读懂
我觉得你这种面向结构的程序设计不是很好懂哈,

板凳

不好意思啦,在完成作业的时候想的是交差,没有想过其他人看的时候会怎样,以后我帖程序的时候注意一下啦!

3 楼

//NQueens.cpp
//Author:meteor135
//email:meteor@mail.biti.edu.cn

#include <time.h>
#include <stdio.h>
#define OUTPUT 0 ////将这里改为0就不输出布局信息
#define QUENE_SIZE 14//将这里改为N就是N皇后问题
int a[5*QUENE_SIZE-1];
void solve(int i)
{
    for( int j = QUENE_SIZE+1; j>1;--j)
    {
#if(OUTPUT)
        if (i>QUENE_SIZE)
        {
            printf("%10d",a[j]);
        }
        else
#endif
        if(i<=QUENE_SIZE&&!(a[j]|a[j+i+QUENE_SIZE-1]|a[j-i+4*QUENE_SIZE-1]))
        {
            a[j]=a[j+i+QUENE_SIZE-1]=a[j-i+4*QUENE_SIZE-1]=i;
            solve(i+1);
            a[j]=a[j+i+QUENE_SIZE-1]=a[j-i+4*QUENE_SIZE-1]=0;
        }
    }
}
void main()
{
    long starttime = time(NULL);
    solve(1);
    long endtime = time(NULL);
    printf("\nTotal solve time is %5.2fs\n",difftime(endtime,starttime));
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册