ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:18.85KB ,
资源ID:11199058      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-11199058.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法课程设计迷宫C实现七.docx)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

算法课程设计迷宫C实现七.docx

1、算法课程设计迷宫 C 实现七/*欢迎进入我的迷宫*/#include stdio.h #include stdlib.h#include grahics.h /包含画图函数头文件 #include time.h /本题用于后面的随机函数的发生#include conio.h /本题用于 getch()#include rocess.h /本题用于清屏#define N 8#define MAX_STACK_SIZE N*N /最大栈容量 #define TRUE 1#define FALSE 0#define LEN (300/N)/*结构体记录每一步的横坐标纵坐标和方向*/tyedef st

2、ruct short int row;short int col;short int dir;element;element stackMAX_STACK_SIZE;/*结构体记录水平和垂直的偏移量*/tyedef struct short int vert; /水平偏移量short int horiz; /垂直偏移量offsets;offsets move8; /8 个方向的moveint mazeN+2N+2; /二维数组记录迷宫int markN+2N+2; /记录迷宫中每点是否可到达int EXIT_ROW = N, EXIT_COL = N; /标记最后出口/*在栈中加入一个素 */

3、void add(int *to, element item)if (*to = MAX_STACK_SIZE - 1) /判断栈是否已满 rintf(The stack is full!n); /栈满时输出return;/end ifstack+*to = item; /当前信息压进栈中/*返回栈中顶部的素*/element delet(int *to)if (*to = -1) /判断栈是否为空rintf(The stack is emty ! n);exit(1);/end ifreturn stack(*to)-; /不为空时输出栈顶素 /*输出走出迷宫的径*/void ath(voi

4、d)int i, j, k, row, col, next_row, next_col, dir, found = FALSE;IMAGE ; /*-*| i - 用来循环计数 | row , col - 当前位置的坐标 | next_row - 移动后的位置的横坐标 | next_col - 移动后的位置的纵坐标 | dir - 移动的方向 | found - 标志径是否发现 |*-*/element osition;int to = 0;mark11 = 1; /由于标志 maze11已经被走过了stack0.row = 1;stack0.col = 1;stack0.dir = 1; /

5、第一步的状态move0.vert = -1; move0.horiz = 0 ;move1.vert = -1; move1.horiz = 1 ;move2.vert = 0 ; move2.horiz = 1 ;move3.vert = 1 ; move3.horiz = 1 ;move4.vert = 1 ; move4.horiz = 0 ;move5.vert = 1 ; move5.horiz = -1;move6.vert = 0 ; move6.horiz = -1;move7.vert = -1; move7.horiz = -1; /指定了八个方向initgrah(640,

6、480); /VGAHI 将屏幕调整为 VGA 模式下的 16 色分辨率为 640*480 /*-*| 主要算法描述: | 当 stack 不为空, 移动到 stack 顶部的位置 | 试着向各个方向移动如果可以移动就移动到 | 下一个位置并把它标志成 1。 | 然后保存状态并加入到 stack 中 | 如果径被破坏或者不存在就将其删除 | 并返回到上一点继续遍历其他方向的点 | 直到一条径被发现。 |*-*/while ( to -1 !found) /stack不为空,且没有找到径osition = delet(to); /删除 stack 中的素row = osition.row;col

7、 = osition.col;dir = osition.dir;while (dir 8 !found) /方向小于 8 且没有找到next_row = row + movedir.vert; /下一步要走的点的行=当前行+行偏移量next_col = col + movedir.horiz; /下一步要走的点的列=当前列+列偏移量if (next_row = EXIT_ROW next_col = EXIT_COL)found = TRUE; /发现径else if ( !mazenext_rownext_col !marknext_rownext_col)/如果这点没有被走过并且可以走m

8、arknext_rownext_col = 1; /走过后将 mark 设成1osition.row = row;osition.col = col;osition.dir = dir; /方向最后标志为 07add(to, osition); /将有的点再加入到 stackrow = next_row; col = next_col; dir = 0; /移动到下一个点 /end else ifelse +dir; /尝试其他方向/end nei while/end wai whilefor(j=1;j=N;j+)for(k=1;k=N;k+)setcolor(WHITE); /设置颜色ci

9、rcle(j*LEN,k*LEN,11); /在以(j*LEN-2,k*LEN-2)点以 11 为半径画圆setcolor(GREEN);outtextxy(j*LEN-5,k*LEN-5,mazekj?1:0);/x,y 坐标输出文字if (found) /如果发现径则打印出来outtextxy(20,10,The ath is: );outtextxy(10,320,请按任意键然后你将手动走迷宫);setcolor(YELLOW);for (i=0; i to;i+)line(stacki.col*LEN, stacki.row*LEN,stacki+1.col*LEN,stacki+1.

10、row*LEN); /在以栈的两个素为顶点的不能为 i=to 因为 i=to 时 i+1 就出栈了line(stacki.col*LEN, stacki.row*LEN,col*LEN,row*LEN);/连栈顶素和下一个点line(col*LEN, row*LEN,EXIT_COL*LEN,EXIT_ROW*LEN); /连上最后一个素/*实现笑脸走径*/circle(250,330, 10); line(244,324,248,324); line(252,324,256,324);line(248,336,252,336); /画笑脸getimage(,240,320,21,21); /

11、获得笑脸for (i=0; i=to;i+)utimage(stacki.col*LEN-10,stacki.row*LEN-10, );getch(); /让笑脸按径走utimage(col*LEN-10,row*LEN-10, );getch(); /让笑脸走到倒数第二个因为他不在栈中utimage(EXIT_COL*LEN-10,EXIT_ROW*LEN-10, ); /让笑脸走到最后一个getch(); /*/ /end if /把下一个点和出口连上 else outtextxy(20,10,The maze does not have a ath);/否则打印不存在信息/*主函数*/

12、void main() int i, j, c;/system(cls); /调用清屏函数 for (i=0;iN+2;i+)maze0i=1; mazei0=1;mazeN+1i=1;mazeiN+1=1; /将迷宫的四周设为 1(墙壁) rintf(欢迎进入我的迷宫n);rintf(Would you like to inut the maze by youself?nYes or No?n);c = getchar();if(c=Y | c= y) /大些小写都可rintf(Enter the %d * %d maze:n,N,N); /手动输入for (i=1; iN+1; i+)fo

13、r(j=1; jN+1; j+)scanf(%d,mazeij); /end ifelse srand(unsigned)time(NULL); rintf(The maze is created by the comuter:n);for (i=1; iN+1; i+)for(j=1; jN+1; j+)mazeij=rand()%2;mazeNN = 0; maze11 = 0; /指定随机产生时第一个和最后一个素必须为 0for(i=1;iN+1;i+)for(j=1;jN+1;j+)rintf(%3d,mazeij); /输出数组rintf(n);/end elseath(); /调用函数ath() getch();

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报