数据结构_迷宫
来源:互联网 发布:xenomai编程笔记 编辑:程序博客网 时间:2024/04/30 19:22
#include <iostream>#include <cstdlib>#include <cstring>#include <string>#include <algorithm>int bz[10][10]; //标记 typedef struct//代表一个点{ int x; //行 int y; //列 int dept; //方向,dept=1代表右,dept=2代表下,dept=3代表左,dept=2代表上}point;typedef struct //构造栈 { point *base; point *top; int stacksize;}SqStack;int maze[10][10]= //等于1代表通不过,0代表能通过,2代表已经走过{ {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,1,1,1,1,1,1}, {1,0,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1}};int InitStack(SqStack *s) //栈的初始化{ s->base=(point *)malloc(100*sizeof(point)); if (!s->base) return -2; s->top=s->base; s->stacksize=100; return 1;}int Pop(SqStack *s,point *e) //出栈{ if (s->base==s->top) return 0; *e=*--s->top; return 1;}int Push(SqStack *s,point e) //入栈{ if (s->base-s->top>=s->stacksize) { s->base=(point *)realloc(s->base,(100+10)*sizeof(point)); if (!s->base) return -2; s->top=s->base+s->stacksize; s->stacksize=100+10; } *s->top++=e; return 1;}void ptint(SqStack s,point *q) //输出可走的路径 { memset(bz,0,sizeof(bz)); int t=0; while (s.base!=s.top) { bz[(*s.base).x][(*s.base).y]=1; s.base++; } bz[q->x][q->y]=1; for (int i=0;i<10;i++) { for (int j=0;j<10;j++) { if (bz[i][j]==1) { printf("# "); } if (bz[i][j]==0) { printf("。"); } } printf("\n"); }}int DFS(SqStack *s,point *e,point *q) //深搜遍历 { static int i=1; //第个路径 while (1) { while (e->dept<=4) //如果四周都不通,则退出 { switch (e->dept) { case 1: if (maze[e->x][e->y+1]==0) //如果下面的一步可以走 { maze[e->x][e->y]=2; //则标记为已走 Push(s,*e); //入栈 e->y++; //坐标加1 e->dept=1; //方向变为1进行下一步 } else e->dept++; //如果下面的一步不可走则继续找其他方向 break; case 2: if (maze[e->x+1][e->y]==0) { maze[e->x][e->y]=2; Push(s,*e); e->x++; e->dept=1; } else e->dept++; break; case 3: if (maze[e->x][e->y-1]==0) { maze[e->x][e->y]=2; Push(s,*e); e->y--; e->dept=1; } else e->dept++; break; case 4: if (maze[e->x-1][e->y]==0) { maze[e->x][e->y]=2; Push(s,*e); e->x--; e->dept=1; } else e->dept++; break; } } if (s->base==s->top) return 0; //如果回到的起点表示走不通 if (!(e->x==q->x&&e->y==q->y)) //还没找到了终点 { Pop(s,e); //弹栈往后退一个节点 e->dept++; maze[e->x][e->y]=0; } else break; //找到了终点,退出for } printf("第%d条路径:\n",i++); ptint(*s,q); //输出路径 return 1;}int main(){ SqStack s; point e,q; InitStack(&s); printf("请输入入口的横纵坐标:\n"); scanf("%d%d",&e.x,&e.y); printf("请输入出口的横纵坐标:\n"); scanf("%d%d",&q.x,&q.y); e.dept=1; //方向置为1 if (!DFS(&s,&e,&q)) printf("走不通\n"); else { while (s.base!=s.top)//直到走完所有的方向 { Pop(&s,&e); e.dept++; maze[e.x][e.y]=0; DFS(&s,&e,&q); } } //DFS(&s,&e,&q); return 0;}
1 0
- 数据结构_迷宫
- 数据结构_不相交集合_绘制迷宫
- 数据结构_队列_迷宫的最短路径
- (回溯法) 数据结构_回溯法求解迷宫路径
- 数据结构--迷宫
- (数据结构)栈_迷宫求解(严蔚敏P50) _模仿
- 递归_迷宫
- 1792_迷宫
- 数据结构实习:迷宫求解
- 迷宫MAZE(数据结构)
- 数据结构学习笔记--迷宫
- 迷宫求解(数据结构)
- 数据结构 迷宫 代码
- 数据结构-迷宫求解路径
- 数据结构之迷宫
- 数据结构之迷宫
- 数据结构迷宫破解
- 数据结构课程设计---迷宫
- TIPTOP實務--退貨折讓向廠商收款的作法(匯款)
- Dubbo java.io.IOException: Can not lock the registry cache file
- 九度考研真题 浙大 2005-1浙大1013:开门人和关门人 排序
- Java加密技术(九)——单向认证
- squid for WIN + DNSPOD 搭建CDN服务器手记
- 数据结构_迷宫
- HTML+CSS面试技巧
- RFS[18075]: No standby redo logfiles available for thread 1
- eclipse安装ADT出错问题
- 九度考研真题 浙大 2005-2浙大1014:排名 多重排序
- 数据结构_括号匹配
- SimpleDateFormat并发问题解决方案
- VIII.1 INS-30510: Insufficient number of ASM disks selected.
- 九度考研真题 浙大 2005-3浙大1012:畅通工程