下载此文档

2.9迷宫问题.doc


文档分类:IT计算机 | 页数:约7页 举报非法文档有奖
1/7
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/7 下载此文档
文档列表 文档介绍
[问题描述]:以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。[实现要求]:⑴实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。⑵编写递归形式的算法,求得迷宫中所有可能的通路;⑶以方阵形式输出迷宫及其通路。[测试数据]迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口[实现提示]:计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(m,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。、自定义数据类型structStack//构造栈{ intMaze_x,Maze_y,Maze_z;//定义迷宫X,Y坐标,z方向 Stack*next;//定义栈指针};2、基本操作函数 elseif(a[i+1][j]==0)//判断下边是否可行{ push(i,j,2); i++; a[i][j]=2;//标记走过的位置} elseif(a[i][j-1]==0)//判断左边是否可行{ push(i,j,3); j--; a[i][j]=2;//标记走过的位置} elseif(a[i-1][j]==0)//判断上边是否可行{ push(i,j,4); i--; a[i][j]=2;//标记走过的位置} else//四个方向都不可行,退栈{ inte1,e2; Stack*p;p=ps; ps=ps->next; e1=p->Maze_x; e2=p->Maze_y; a[e1][e2]=3;//标记走过的死胡同坐标 deletep;//删除栈顶元素 i=ps->Maze_x; j=ps->Maze_y; if(ps==NULL)//判断栈空否{ cout<<"nopath!"<<endl; exit(1); } } }#include<iostream>#include<iomanip>usingnamespacestd;Stack*ps;//链头指针voidPop()//出栈函数{ Stack*p;p=ps; ps=ps->next; deletep;}voidpush(intx,inty,intz)//进栈函数{ Stack*t; t=newStack; t->Maze_x=x; t->Maze_y=y; t->Maze_z=z;t->next=ps; ps=t;}voidMazepath(inta[][10],inti,intj)//迷宫路线寻找函数{ a[i][j]=2; intc,d,m=1;//定义变量c,d为出口坐标,变量m作为走过的步数 cout<<"请输入出口坐标:"; cin>>c>>d; while(i!=c||j!=d)//判断是否到达出口 { if(a[i][j+1]=

2.9迷宫问题 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数7
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xxq93485240
  • 文件大小198 KB
  • 时间2019-12-15