求个高手帮我解释一下部分程序
求求高手帮帮我吧,我真的很想学好,请帮我解释一下部分程序,谢谢程序如下
//求八皇后问题所有解
enum boolean {False, True};
enum boolean a[9], b[17], c[17];
int s[9];
#include<stdio.h>
//移去位置(i,j)上的皇后的函数
void movequeen(int i, int j)
{
a[j] = True;
b[i+j] = True;
c[i-j+9] = True;
}
//打印输出一个解的函数
void print()
{
int k;
printf("\n行号: 1 2 3 4 5 6 7 8\n");
printf("列号: ");
for (k = 1; k<=8; k++)
{
printf("%4d",s[k]);
}
printf("\n");
}
void main()
{
void print(), movequeen(), eightqueen(); //函数声明
eightqueen(); //调用求解八皇后问题
}
void eightqueen()
{
int i, j;
for (i = 2; i <= 16; i++)
{
if (i>=2 && i<=9)
{
a[i-1] = True;
}
b[i] = True;
c[i] = True;
}
i = 1;
j = 1;
while (i>=1) //当i=0时终止循环
{
while (j<=8) //在当前行i上寻找安全位置;
{
if (a[j] && b[i + j] && c[i-j+9])
{
break;
}
j++;
}
if (j<=8) //找到安位置(i,j)
{
a[j] = False;
b[i+j] = False;
c[i-j+9] = False;
s[i] = j; //皇后位置j入栈
if (i == 8) //找到一个解,输出解
{
print(); //打印输出一个解
movequeen(i, j); //移去位置(i,j)上的皇后
i = i - 1;
j = s[i]; //退栈,回溯到上一个皇后
movequeen(i, j); //移去位置(i,j)上的皇后
j++;
}
else
{
i++;
j = 1; //准备放置下一个皇后
}
}
else
{
i--; //退栈
if (i>=1) //栈不空,移去皇后
{
j = s[i];
movequeen(i, j); //移去皇后
j++;
}
}
}
}
问题来了
int i, j;
for (i = 2; i <= 16; i++) 这里为什么要i=2呢 什么意思 ? 为什么又要i <= 16作为循环条件呢
{
if (i>=2 && i<=9) 这里又是什么意思呢
{
a[i-1] = True;
}
b[i] = True;
c[i] = True;
}
有热心人请加下我QQ 119744220
[[it] 本帖最后由 a119744220 于 2009-7-20 21:59 编辑 [/it]]