专业画板设备:来帮我看看这个程序哪有问题?

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 14:50:34
这是一个八皇后问题:
编写后发现结果总不对。

#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct ElemType{
int x;
int y;
}SElemType;

typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;

Status InitStack(SqStack &S)
{
S.base = (SElemType *)malloc(STACK_INT_SIZE * sizeof(ElemType));
if(!S.base)exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INT_SIZE;
return OK;
}/*InitStack*/

Status GetTop(SqStack S,SElemType e)
{
if(S.top == S.base) return ERROR;

e = *(S.top-1);
return OK;
}/*GetTop*/

Status Push(SqStack &S,SElemType e)
{
if(S.top - S.base >=S.stacksize){
// S.base = (SElemType *)realloc(S.base,(S.stacksize + S.STACKINCREMENT)*sizeof(ElemType));
if(!S.base) exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize +=STACKINCREMENT;
}

*S.top++ = e;
return OK;
}/*Push*/

Status Pop(SqStack &S,SElemType &e){

if(S.top == S.base) return ERROR;

e = *(--S.top);
return OK;
}/*Pop*/

int StackLength(SqStack &S){

int length;
length = S.top - S.base;

return length;

}/*StackLength*/

Status StackEmpty(SqStack &S){

if (S.top - S.base == 0)
return OK;
else return 0;

}/*StackEmpty*/

Status ClearStack(SqStack &S){

S.top = S.base;
return OK;

}/*ClearStack*/

Status DestroyStack(SqStack &S)
{
if (S.top - S.base == 0)
return ERROR;
else{ free(S.base); return OK;}

}/*DestroyStack*/

/******************************************************************************/
void main(void)
{

int i,j,k;
int FirstQueen;
SElemType a[8][8];
SqStack S;
SElemType *p;
SElemType temp;
int length = 0;

for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
a[i][j].y=j;
a[i][j].x=i;
}
}

printf("Postion For The First Queen: ");
scanf("%d",&FirstQueen);

InitStack(S);

Push(S,a[0][FirstQueen-1]);

for(i=1;i<8;i++)
{
for(k=0;k<8;k++)
{
p=S.base;

for(j=0;j<StackLength(S);j++)
{

if(k == p->y || (i - p->x) == abs(p->y - k))
{
if(k == 7)
{
Pop(S,temp);
i--;
k=temp.y;
}
break;
}

p++;
}

if(j==StackLength(S))
{
Push(S,a[i][k]);
break;
}

}

}

p=S.base;
length=StackLength(S);
for(i=0;i<length;i++)
{

printf("%d ",p->y + 1);

for(k=0;k<8;k++)
{
if(k == p->y)
printf(" Q ");
else printf(" + ");
}
printf("\n");

p++;

}

}