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

上传人:飞****9 文档编号:28822910 上传时间:2021-09-14 格式:DOCX 页数:13 大小:18.85KB
收藏 版权申诉 举报 下载
算法课程设计迷宫C实现七_第1页
第1页 / 共13页
算法课程设计迷宫C实现七_第2页
第2页 / 共13页
算法课程设计迷宫C实现七_第3页
第3页 / 共13页
资源描述:

《算法课程设计迷宫C实现七》由会员分享,可在线阅读,更多相关《算法课程设计迷宫C实现七(13页珍藏版)》请在装配图网上搜索。

1、算法课程设计迷宫C实现七 /*欢迎进入我的迷宫*/#include <stdio.h> #include <stdlib.h>#include <grahics.h> /包含画图函数头文件 #include <time.h> /本题用于后面的随机函数的发生#include <conio.h> /本题用于getch()#include <rocess.h> /本题用于清屏#define N8#define MAX_STACK_SIZEN*N /最大栈容量 #define TRUE 1#define FALSE 0#defin

2、e LEN (300/N)/*结构体记录每一步的横坐标纵坐标和方向*/tyedef struct 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_

3、ROW = N, EXIT_COL = N; /标记最后出口/*在栈中加入一个素*/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");

4、exit(1);/end ifreturn stack(*to)-; /不为空时输出栈顶素 /*输出走出迷宫的径*/void ath(void)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

5、= 0;mark11 = 1; /由于标志maze11已经被走过了stack0.row = 1;stack0.col = 1;stack0.dir = 1; /第一步的状态move0.vert = -1; move0.hor iz = 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.ver

6、t = 0 ; move6.horiz = -1;move7.vert = -1; move7.horiz = -1; /指定了八个方向initgrah(640,480); /VGAHI 将屏幕调整为VGA模式下的16色分辨率为640*480 /*-*| 主要算法描述: | 当stack不为空,移动到stack顶部的位置 | 试着向各个方向移动如果可以移动就移动到 | 下一个位置并把它标志成1。 | 然后保存状态并加入到stack中 | 如果径被破坏或者不存在就将其删除 | 并返回到上一点继续遍历其他方向的点 | 直到一条径被发现。 |*-*/while ( to > -1 &am;&a

7、m; !found) /stack不为空,且没有找到径osition = delet(&am;to); /删除stack中的素row = osition.row;col = osition.col;dir = osition.dir;while (dir < 8 &am;&am; !found) /方向小于8且没有找到next_row = row + movedir.vert; /下一步要走的点的行=当前行+行偏移量next_col = col + movedir.horiz; /下一步要走的点的列=当前列+列偏移量if (next_row = EXIT_ROW &am;&am; nex

8、t_col = EXIT_COL)found = TRUE; /发现径else if ( !mazenext_rownext_col &am;&am;!marknext_rownext_col)/如果这点没有被走过并且可以走marknext_rownext_col = 1; /走过后将mark设成1osition.row = row;osition.col = col;osition.dir = dir; /方向最后标志为07add(&am;to, osition); /将有的点再加入到stackrow = next_row; col = next_col; dir = 0; /移动到下一个点

9、 /end else ifelse +dir; /尝试其他方向/end nei while/end wai whilefor(j=1;j<=N;j+)for(k=1;k<=N;k+)setcolor(WHITE); /设置颜色circle(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,&q

10、uot;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.row*LEN); /在以栈的两个素为顶点的不能为i<=to因为i=to时i+1就出栈了line(stacki.col*LEN, stacki.row*LEN,col*LEN,row*LEN);/连栈顶素和下一个点line(col*LEN, row*LE

11、N,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(&am;,240,320,21,21); /获得笑脸for (i=0; i<=to;i+)utimage(stacki.col*LEN-10,stacki.row*LEN-10, &am;);getch(); /让笑脸按径走utimage(col*LEN-10,row*LEN-10, &am;

12、);getch(); /让笑脸走到倒数第二个因为他不在栈中utimage(EXIT_COL*LEN-10,EXIT_ROW*LEN-10, &am;); /让笑脸走到最后一个getch(); /*/ /end if /把下一个点和出口连上 else outtextxy(20,10,"The maze does not have a ath");/否则打印不存在信息/*主函数*/void main() int i, j, c;/system("cls"); /调用清屏函数 for (i=0;i<N+2;i+)maze0i=1; mazei0=1;ma

13、zeN+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; i<N+1; i+)for(j=1; j<N+1; j+)scanf("%d",&am;

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

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!