四皇后问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验目的及要求
(1)掌握回溯法算法设计的一般思想和方法;
(2)掌握4-皇后问题算法的设计;
(3)理解回溯法的用途,能用回溯法求解其它类似问题。

二、实验设备(环境)及要求
(1)实验硬件:
PC机
(2)实验软件:VC6.0
三、实验内容与步骤
题目1皇后问题的回溯算法求解
1.参考教材32面的回溯算法框架对4-皇后问题的回溯法求解进行自然语言描述:1)设置一维数组啊,a(i)(i=1,2,3,4)在1~4中取值,定义一个一位数组
b[17],用来存放满足条件的组合,定义的变量sum用来记录满足条件的组合个数。

首现从a
(1)=1开始,逐步给a(i)(1<=i<=4)赋值,每一个a(i)赋值从1开始第递增至n,另设置一个变量k,使k从i-1递减至i-1。

为判断数字是否重复,设置变量g:
先赋值flag=1;若出现某两数字相同(即a[i]=a[k])和某两个数处于对角线上(即abs(a[i]-a[k])=i-k),则赋值flag=0
2)若i=4与g=1同时满足,则此为一种解,用s统计解的个数后,格式打印输出这组解3)若i<4且g=1,表明还不到4个数字,则下一个a(i)从1开始赋值,继续
4)若a(i)=n且i>1则返回到前一个I(即i=i-1)再试。

若a(i)=n且i=1,无法返回,意味着已全部试完,则结束整个程序
2.使用C语言编写4-皇后问题的回溯算法源程序:// ccc(皇后问题).cpp :
定义控制台应用程序的xx点。

//
#include"stdafx.h"
#include"stdio.h"
voidmain(){intn=4,i=1,j,a[5],flag,k,m;
intb[17]={0},sum=0;
printf("输出四皇后问题的方案:
\n");
a[1]=1;
while
(1){flag=1;
for(k=i-1;k>=1;k--)
{if(a[i]==a[k]) flag=0;
if(a[i]-a[k]==i-k||a[i]-a[k]==k-i) flag=0; }
if(flag&&i==4){for(j=1;j<=4;j++)
for(m=1;m<=16;m++)
if(m==(j-1)*4+a[j])
{ b[m]=a[j];break;}
for(m=1;m<=16;m++){sum++;
printf("%d",b[m]);
b[m]=0;
if(sum%4==0)
printf("\n");
if(sum%16==0)
printf("\n");}printf("\n");}}
if(i<n&&flag) {i++;a[i]=1;continue;} while(a[i]==n &&i>1) i--;
if(a[i]==n&&i==1)break;
elsea[i]=a[i]+1;。

相关文档
最新文档