⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queen.cpp

📁 一个有很多错误的问题
💻 CPP
字号:
		 /*        queen.c V6.15        */
		 /*    author:zhouzhenhua       */
		 /*hunan agricultural university*/
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "graphics.h"
#include "string.h"
#define  DataType  int
#define  N   		8
#define	 CELLWID	50
struct	dblNode;
typedef	struct dblNode  *pdblNode;
typedef struct dblNode  *pdblHead;
struct  dblNode
{
	DataType	s[N];
	pdblNode	llink,rlink;
};

pdblHead createNullList_link(void)
{
	pdblHead cdlist;
	int i;
	cdlist=(pdblHead)malloc(sizeof(struct dblNode));
	if(cdlist==NULL)
	{
		printf("out of space is fun pdblHead createNullList_link(void)!");
		exit(1);
	}
	for(i=0;i<N;i++)
	{
		cdlist->s[i]=0;
	}
	cdlist->llink=cdlist->rlink=NULL;
	return(cdlist);
}/*pdblHead createNullList_link(void)*/

void append_link(pdblHead cdlist,DataType arr[])
{
	pdblNode q;
	int i;
	q=(pdblNode)malloc(sizeof(struct dblNode));
	if(q==NULL)
	{
		printf("out of space in fun void append_link(pdblHead cdlist,DataType arr[])");
		exit(1);
	}
	for(i=0;i<N;i++)
		q->s[i]=arr[i];
	cdlist->s[0]++;
	if(cdlist->rlink!=NULL)
	{

		q->llink=cdlist->llink;
		q->rlink=cdlist->rlink;
		cdlist->llink->rlink=q;
		cdlist->llink=q;
	}else{
		q->llink=NULL;
		q->rlink=NULL;
		cdlist->rlink=q;
		cdlist->llink=q;
	}

}/*void append_link(pdblHead cdlist,DataType arr[])*/

void print_link(pdblHead cdlist)
{
	pdblNode p=cdlist->rlink;
	int i=1,j;
	if(p==NULL)
	{
		printf("empty cdlist in fun  viod print_link(pdblHeah cdlist)!");
		exit(1);
	}
	for(i=1;i<=cdlist->s[0];i++)
	{
		printf("the res [%d]:",i);
		for(j=0;j<N;j++)
		{
			printf("%4d",p->s[j]);
		}
		printf("\n");
		p=p->rlink;
	}
}/*viod print_link(pdblHeah cdlist)*/

void init(void)
{
	int driver=VGA,mode=VGAHI,errorcode;
	initgraph(&driver,&mode,"");
	errorcode=graphresult();
	if(errorcode!=grOk)
	{
		printf("Graphics error:%s\n",grapherrormsg(errorcode));
		printf("Press any key to halt:\n");
		getch();
		exit(1);
	}
}
void draw_chessboard()
{
	int x0,y0,x,y;
	int i;
	x0=(640-CELLWID*N)/2;
	y0=CELLWID/3;
	clearviewport();
	for(i=0,x=x0+N*CELLWID;i<=N;i++)
	{
		y=y0+i*CELLWID;
		line(x0,y,x,y);
	}
	for(i=0,y=y0+N*CELLWID;i<=N;i++)
	{
		x=x0+i*CELLWID;
		line(x,y0,x,y);
	}
}
void draw_circle(int x,int y)
{
	int i;
	for(i=CELLWID/2;i>0;i--)
		circle(x,y,i);
}
void draw_queen(int arr[])
{

	int x0,y0,x,y;
	int i;
	x0=(640-CELLWID*N)/2;
	y0=CELLWID/3;
	for(i=0;i<N;i++)
	{
		x=x0+i*CELLWID+CELLWID/2;
		y=y0+arr[i]*CELLWID+CELLWID/2;
		draw_circle(x,y);
	}

}

char* atos(int num)
{
	char s[81];
	int i;
	if(num<=0)
	{
		printf("data error in fun char* atos(int num)!\n");
		printf("Press any key to halt!\n");
		getch();
		exit(1);
	}
	int divisor=1,quotient,remainder;
	while(divisor<=num)
		divisor*=10;
	divisor/=10;
	for(i=0;divisor!=0;divisor/=10,i++)
	{
		quotient=num/divisor;
		num=num%divisor;
		s[i]=(char)(quotient+48);
	}
	s[i]='\0';
	return(s);
}

void draw_info(int total,int num)
{
	char author[]={"Author:Zhou Zhenhua"};
	char date[]={"Date:June 14th 2004"};
	char esc[]={"Esc:   -1"};
	char sum[81]={"Total: "};
	char now[81]={"Now:    "};
	char input[81]={"Input: "};
	char* pchar;
	int x0=(640-CELLWID*N)/2,y0=CELLWID/3;
	int x,y,i;
	strcat(sum,atos(total));
	strcat(now,atos(num));
	x=x0+CELLWID/2;
	y=y0+CELLWID*N+20;
	outtextxy(x,y,author);
	x=x0+4*CELLWID;
	outtextxy(x,y,date);
	x=x0+CELLWID*N+20;
	y=y0+CELLWID*(N-1)-40;
	outtextxy(x,y,sum);
	y+=20;
	outtextxy(x,y,esc);
	y=y+20;
	outtextxy(x,y,now);
	y+=20;
	outtextxy(x,y,input);
	gotoxy(76,25);
}

int test(DataType* arr,int index,DataType x)
{
	int i;

	for(i=0;i<index;i++)
		if((x==arr[i])||(x-index==arr[i]-i)||(x+index==arr[i]+i))
			return(0);
	return(1);
}

int queen(DataType* arr,int len)
{
	int i=len-1,j=arr[i]+1;
	if(arr[0]==-1)	 i=j=0;
	for(;i<len;)
	{
		for(;j<len;j++)
			if(test(arr,i,j))
			{
				arr[i]=j;	break;/*break,j mei you zhi jia!*/
			}
		if(j==len)
		{
			i--;			j=arr[i]+1;
			if(i==-1)		return(0);
		}else{
			i++;j=0;
		}
	}/*for(i=0;i<len;)*/
	return(1);
}/*void queen(DataType* arr,int len)*/
void queenAll(pdblHead head)
{
	DataType array[N]={-1};
	while(queen(array,N))
	{
		append_link(head,array);
	}
}/*void queenAll(pdblHead head)*/
void print(DataType* arr,int len)
{
	int i;
	for(i=0;i<len;i++)
		printf("%4d",arr[i]);
	printf("\n");
}

void main()
{

	pdblHead head;
	pdblNode p;
	char s[10];
	int number=1,i;
	init();
	p=head=createNullList_link();
	queenAll(head);

	p=p->rlink;
	draw_chessboard();
	draw_queen(p->s);
	draw_info(head->s[0],1);
	while(1)
	{
		gets(s);
		gotoxy(100,100);
		i=atoi(s);
		if(i==-1)
		{
			closegraph();
			exit(1);
		}
		if(i>0&&i<=head->s[0])
		{
			number=i;
			for(p=head;i>0;i--)
				p=p->rlink;
		}
		draw_chessboard();
		draw_queen(p->s);
		draw_info(head->s[0],number);
	}/*while*/

}/*main()*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -