专业画板设备:来帮我看看这个程序哪有问题?
来源:百度文库 编辑:查人人中国名人网 时间:2024/05/11 17:12:11
这是一个八皇后问题:
编写后发现结果总不对。
#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++;
}
}
编写后发现结果总不对。
#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++;
}
}