×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

C

本文发表在 rolia.net 枫下论坛#include <conio.h>
#define MAXN 20
int n, m,good;
int col[MAXN+1],a[MAXN+1];
int b[2*MAXN+1],c[2*MAXN+1];
main()
{
int i,j;
int num=1;
char awn;
printf("Input n: "); /*输入皇后的个数,例如8*/
scanf("%d",&n);
for(j=0;j<=n;j++)
a[j]=1;
for(j=0;j<=2*n;j++)
b[j]=c[j]=1;
m=1;
col[1]=1;
good=1;
col[0]=1;
do{
if(good)
if(m==n)
{
printf("NO. %d method.\n",num); /*输出第 num种排列方法*/
printf(" ");
for(i=1;i<=n;i++)
printf("%4d",i);
printf("\n");

for(i=1;i<=n;i++)
{ printf("%d",i);
for(j=1;j<=n;j++)
{if(j==col[i])
{
printf(" Q"); /*Q的位置为皇后的位置*/
}
else printf(" *");
}
printf("\n");
}

awn=getch();
if(awn=='Q'&brvbar;&brvbar;awn=='q')
exit();
else
num++;
while(col[m]==n)
{
m--;
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1;
}
col[m]++;
}
else{
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=0;
col[++m]=1;
}
else{
while(col[m]==n)
{
m--;
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1;
}
col[m]++;
}
good=a[col[m]]&&b[m+col[m]]&&c[n+m-col[m]];
}
while(m!=0);
}更多精彩文章及讨论,请光临枫下论坛 rolia.net
Report

Replies, comments and Discussions:

  • 工作学习 / IT技术讨论 / 请教各位哪里可找到有关八皇后算法的源程序?急,谢谢各位了!!
    • C
      本文发表在 rolia.net 枫下论坛#include <conio.h>
      #define MAXN 20
      int n, m,good;
      int col[MAXN+1],a[MAXN+1];
      int b[2*MAXN+1],c[2*MAXN+1];
      main()
      {
      int i,j;
      int num=1;
      char awn;
      printf("Input n: "); /*输入皇后的个数,例如8*/
      scanf("%d",&n);
      for(j=0;j<=n;j++)
      a[j]=1;
      for(j=0;j<=2*n;j++)
      b[j]=c[j]=1;
      m=1;
      col[1]=1;
      good=1;
      col[0]=1;
      do{
      if(good)
      if(m==n)
      {
      printf("NO. %d method.\n",num); /*输出第 num种排列方法*/
      printf(" ");
      for(i=1;i<=n;i++)
      printf("%4d",i);
      printf("\n");

      for(i=1;i<=n;i++)
      { printf("%d",i);
      for(j=1;j<=n;j++)
      {if(j==col[i])
      {
      printf(" Q"); /*Q的位置为皇后的位置*/
      }
      else printf(" *");
      }
      printf("\n");
      }

      awn=getch();
      if(awn=='Q'&brvbar;&brvbar;awn=='q')
      exit();
      else
      num++;
      while(col[m]==n)
      {
      m--;
      a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1;
      }
      col[m]++;
      }
      else{
      a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=0;
      col[++m]=1;
      }
      else{
      while(col[m]==n)
      {
      m--;
      a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1;
      }
      col[m]++;
      }
      good=a[col[m]]&&b[m+col[m]]&&c[n+m-col[m]];
      }
      while(m!=0);
      }更多精彩文章及讨论,请光临枫下论坛 rolia.net
      • 谢谢. 请问有JAVA版吗? 急
    • 记得我还在上高中的时候这个题目就很热了
      我们戏称它为"扒皇后", 见面就问"你BA皇后了吗"
      • 高中时觉得这个很难
    • 你复习一下递归的概念就想起来了!!!
    • 呵呵,估计是要交第一个assignment了吧?在york?