八皇后问题 帮帮看看错在哪里??

阿仆来耶 2009-06-16 11:06:43
//八皇后问题
#include"stdio.h"
#include"stdlib.h"
#define maxsize 100
//**************************************皇后的数据结构
typedef struct
{
int i,j;//i为横坐标 j为纵坐标
}empress; //皇后的结构数组
//*****************************栈的数据结构
typedef struct
{
empress data[maxsize];
int top;
}seqstack,*pseqstack;
//**************************************************冲突判定数组
int b[7]={0,0,0,0,0,0,0}; //判断行列是否存在冲突 如果存在冲突为一,不存在冲突为零
int c[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};//判断左右斜行是否存在冲突 如果存在冲突为一,不存在冲突为零
int d[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};//判断右左斜行是否存在冲突 如果存在冲突为一,不存在冲突为零
pseqstack initseqstack()
{
pseqstack s;
s=(pseqstack)malloc(sizeof(seqstack));
if(s)
s->top=-1;
return s;
}
//*******************判断(i,j)位置是否能够放入皇后,如果函数值为1,则能够放入皇后;如果函数值为0,则不能够放入皇后
int vajus(int i,int j)
{
int m,n,q;
m=j;
n=j-i+7;
q=i+j;
if((b[m]==0)&&(c[n]==0)&&(d[q]==0))
return 1;
else return 0;
}
//*********************************判断栈是否为空,如果为空则输出1;否之输出0
int emptyseqstack(pseqstack s)
{
if(s->top==-1)
return 1;
else return 0;
}
//****************************将皇后入栈并做好了避免冲突的标记
int pushseqstack(pseqstack s,empress virempress)
{
if(s->top==maxsize-1)
{
printf("stack is full!\n");
return 0;
}
else
{
s->top++;
s->data[s->top]=virempress;
b[virempress.j]=1;c[virempress.j-virempress.i+7]=1;d[virempress.j+virempress.i]=1;
return 1;
}
}
//************************************皇后出栈,并使作为冲突的标志解除
int popseqstack(pseqstack s,empress *virempress)
{
if(emptyseqstack(s))
{
printf("stack is empty!\n");
return 0;
}
else
{
*virempress=s->data[s->top];
s->top--;
b[(*virempress).j]=0;c[(*virempress).j-(*virempress).i+7]=0;d[(*virempress).j+(*virempress).i]=0;
return 1;
}
}
//************察看栈顶元素
int seeseqstack(pseqstack s,int *i)
{
if(emptyseqstack(s))
{
printf("stack is empty!\n");
return 0;
}
else
{
*i=s->data[s->top].i;
return 1;
}
}
//********************************************打印出皇后在8*8方阵上的位置
int print(pseqstack s)
{
int current[10];
int j=0,i=s->top;
while(i>0)
{
current[j]=(s->data[i]).j;
j++;i--;
}
for(i=0;i<j;i++)
printf(" %d",current[i]);
printf("\n");
return 1;

}
void main()
{
int m,i,j,flag1=0,count,flag2=0;
empress virempress;
pseqstack s;
s=initseqstack();
for(m=0;m<8;m++)
{
virempress.i=0;
virempress.j=m;
pushseqstack(s,virempress);
while(!emptyseqstack(s))
{
flag2=0;
seeseqstack(s,&count);
if(count==7)
{print(s);popseqstack(s,&virempress);popseqstack(s,&virempress);flag1=1;}
else
{
if(flag1==0)
{i=virempress.i+1;j=0;}
if(flag1==1)
{i=virempress.i;j=virempress.j+1;}
do{
if(vajus(i,j))
{
virempress.i=i;virempress.j=j;pushseqstack(s,virempress);flag1=0;flag2=1;
}
j++;
}while(j<8&&flag2==0);
if(j==8)
{flag1=1;popseqstack(s,&virempress);}
}
}
}
}
...全文
78 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿仆来耶 2009-07-10
  • 打赏
  • 举报
回复
thanks
gjc550 2009-06-23
  • 打赏
  • 举报
回复
顶一下

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧