打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
八皇后问题

首先几个图形的函数:

                            size=imagesize(x1,y1,x2,y2) ;     返回存储区域所需字节数。
                            arrow=malloc(size);                    建立指定大小的动态区域位图,并设定一指针arrow。
                            getimage(x1,y1,x2,y2,arrow);        将指定区域位图存于一缓冲区。
                            putimage(x,y,arrow,copy)           将位图置于屏幕上以(x,y)左上角的区域。

                          void far rectangle(int left, int top, int right, int bottom)图形方式下,在屏幕上画一个矩形

 graphresult() 图形操作结果函数, 函数graphresult()函数返回最后一次图形操作的代码。此函数调用方式为int graphresult(void);

说明: C为图形设置了代码,它们是从-15到0的整数值。其含义见表1-6。

      调用该函数时,出错状态被复位为0,所以返回值(代码)最好存于变量中,以供需要时检测,

      进行下一步图形操作。

      

图形操作信息名称 代码 含   义
grInvalidDeviceNum -14 无效设备号
grInvalidFont -13 无效字体文件
grIOerror -12 输入输出错误
grError -11 一般图形错误
grInvalidMode -10

无效的图形模式

grNoFontMem -9 没有足够内存用于装字体文件
grFontNotFound -8 没有找到字体文件
grNoFloadMem -7 Flood填 充内存不足
grNoScanMem -6 Scan填 充内存不足
grNoLoadMem -5 没有足够内存装入图形驱动程序
grInvalidDriver -4 无效图形驱动程序
grFileNoFound -3 没有找到图形驱动文件
grNoDetected -2 没有检测到图形硬件
grNoInitGraph -1 没有图形初始化
grOK 0 成功

 

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <dos.h>
char n[3]={'0','0'};/*用于记录第几组解*/
int a[8],b[15],c[24],i;
int h[8]={127,177,227,277,327,377,427,477};/*每个皇后的行坐标*/
int l[8]={252,217,182,147,112,77,42,7};/*每个皇后的列坐标*/
void *arrow;
void try(int i)
{int j;
for (j=1;j<=8;j )
if (a[j-1] b[i j-2] c[i-j 7]==3) /*如果第i列第j行为空*/
{a[j-1]=0;b[i j-2]=0;c[i-j 7]=0;/*占用第i列第j行*/
putimage(h[i-1],l[j-1],arrow,COPY_PUT);/*显示皇后图形*/
delay(500);/*延时*/
if(i<8) try(i 1);
else /*输出一组解*/
{n[1] ;if (n[1]>'9') {n[0] ;n[1]='0';}
bar(260,300,390,340);/*显示第n组解*/
outtextxy(275,300,n);
delay(3000);
}
a[j-1]=1;b[i j-2]=1;c[i-j 7]=1;
putimage(h[i-1],l[j-1],arrow,XOR_PUT);/*消去皇后,继续寻找下一组解*/
delay(500);
}
}
int main(void)
{int gdrive=DETECT,gmode,errorcode;  自动探测图形显示器适配器种类*/
unsigned int size;
initgraph(&gdrive,&gmode,"");            初始化图形系统*/
errorcode=graphresult();
if (errorcode!=grOk)
{printf("Graphics error\n");exit(1);}

//画矩形
rectangle(50,5,100,40);
rectangle(60,25,90,33);
/*画皇冠*/
line(60,28,90,28);line(60,25,55,15);
line(55,15,68,25);line(68,25,68,10);
line(68,10,75,25);line(75,25,82,10);
line(82,10,82,25);line(82,25,95,15);
line(95,15,90,25);
size=imagesize(52,7,98,38);

arrow=malloc(size);
getimage(52,7,98,38,arrow);/*把皇冠保存到缓冲区,保存矩形图形屏幕的内容到bitmap缓冲区*/
clearviewport();    清除当前屏幕窗口显示,仅用于图形工作方式
settextstyle(TRIPLEX_FONT, HORIZ_DIR, 4);  设置图形模式下字符显示底字体、方向和大小settextstyle(int font, int direction, int charsize)  三倍笔画,水平显示,哥特字体
setusercharsize(3, 1, 1, 1);  图形模式下设置任意比例大小的字体显示
setfillstyle(1,4);设置填充模式和填充颜色
for (i=0;i<=7;i ) a[i]=1;
for (i=0;i<=14;i ) b[i]=1;
for (i=0;i<=23;i ) c[i]=1;
for (i=0;i<=8;i ) line(125,i*35 5,525,i*35 5);/*画棋盘*/
for (i=0;i<=8;i ) line(125 i*50,5,125 i*50,285);
try(1);/*调用递归函数*/
delay(3000);
closegraph();
free(arrow);
}


文章出处:http://www.diybl.com/course/3_program/c/csuanfa/2007213/21460.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c语言图像的简单叠加,第10章C语言图形编程.ppt
Swift REPL入门介绍
51单片机控制点阵显示任何你想显示的文字_单片机点阵显示汉字
c语言 图形编程——打造简易的时钟
127.图形文本的输出
调试技巧之调用堆栈
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服