码迷,mamicode.com
首页 > 其他好文 > 详细

8皇后问题

时间:2016-09-23 23:25:13      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

#include <stdio.h>
#include <math.h>
#include <time.h>
#define max 1000
int sum=0;
bool place (int k,int x[])
{

for (int j=1;j<k;j++)
if ((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) return false;
return true;
}
void backtrack (int t,int x[],int n)
{


int i,j;

if (t>n){
sum++;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==x[j])printf("Q ");
else printf("# ");}
printf("\n");}
printf("\n\n");
/*for(i=1;i<=n;i++)
printf("%d",x[i]);
*/

}
else
for (i=1;i<=n;i++) {
x[t]=i;
if (place(t,x)) backtrack(t+1,x,n);
}

}
void main()
{
int x[max],num;
clock_t start_time,end_time;
printf("按任意键继续,Q键结束。");
char ch=getchar();
while(ch!=‘q‘)
{ sum=0;//初始化sum,避免sum累加
printf("请输入皇后的个数为:\n");
scanf("%d",&num);
if(num==2||num==3)printf("输入错误,无解!\n");
else
{
printf("输出皇后排列结果为:\n");
start_time=clock();
backtrack(1,x,num);
end_time=clock();
printf("一共有%d种排列方法。输出耗时:%dms。\n",sum,end_time-start_time);
}

printf("按Q键结束。\n");
ch;
}

}

8皇后问题

标签:

原文地址:http://www.cnblogs.com/shixiaoqiang/p/5901872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!