重回纯C数据结构,迟早要还的。。。记迷宫问题2
2011-12-31 14:19
211 查看
昨天没有想这个问题,今天在任务的就绪表卡住了,于是又想到这个迷宫问题,改写了代码,现在遇到死胡同可以自己识别出来,并且有多条路的时候也能到达出口,当然不是最优解,因此命名为0.2版本,代码如下:
输出结果,唉。。。我尝试了chrome,opera,ie咋都传不了图片啊!!!
运行结果还行,只是历史记忆路径只有一次,如果死胡同需要两步才到底,则它就出不来了,还需要再修改,今天就先到这里,毕竟只是0.2版本,以后的版本还需要把函数封装一下,全用全局变量成何体统。。。祝大家元旦快乐哈~~~
#include<stdio.h> int a,b,c,d,g=0; char mg[6][6]= { {0,0,0,0,0,1}, //6*6的迷宫,0代表可以通过,1代表不可以通过,从左上角开始,从右下角出去 {1,1,0,1,1,1}, {1,0,1,1,0,0}, {0,1,1,0,1,0}, {1,0,1,0,1,0}, {1,1,0,1,1,0} }; typedef struct { int shu; int heng; int name; }move; move m[9]= //有9种走法: { {-1,-1,0}, //左上 {-1,0,1}, //正上 {-1,1,2}, //右上 {0,-1,3}, //左 {0,0,4}, //中(不动) {0,1,5}, //右 {1,-1,6}, //左下 {1,0,7}, //正下 {1,1,8}, //右下 }; typedef struct { int s; int h; }position; position p; //当前的位置 typedef struct { int ps; int ph; int mark; char trace; }PAST; PAST past[6][6]; //记录过去走过的位置 typedef struct { int hs; int hh; }history; history his[36]; //记录前一步的位置,以供退步 void main() { char e[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i', 'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; p.s=0; p.h=0; for(a=0;a<6;a++) //初始化标记全为0,即所有路都没有走过 { for(b=0;b<6;b++) { past[a][b].mark=0; } } past[0][0].mark=1; while((p.s!=5)||(p.h!=5)) //当未到达出口时 { int i; int f=0; for(i=0;i<9;i++) //9个方向的走法依次试一遍 { if(((m[i].shu+p.s)<=5)&&((m[i].shu+p.s)>=0)&&((m[i].heng+p.h)<=5)&&((m[i].heng+p.h)>=0))//如果走法未出界,即还在迷宫内 { if(mg[m[i].shu+p.s][m[i].heng+p.h]==0)//如果这个走法是可以通过的路,即为迷宫的0 { if(past[m[i].shu+p.s][m[i].heng+p.h].mark!=1)//如果这个走法过去没有走过 { his[g].hs=p.s; his[g].hh=p.h;//下一步可以走了,但之前要把现在的位置记下 p.s=m[i].shu+p.s; p.h=m[i].heng+p.h; past[p.s][p.h].mark=1; g++;//g是统计的走的第几步 past[p.s][p.h].trace=e[g]; past[p.s][p.h].ps=p.s; past[p.s][p.h].ph=p.h; break; } else f++;// 走过此路 } else f++;//此路不通 } else f++;//出界了 } if(f==9) { g--; p.s=his[g].hs; p.h=his[g].hh; g++; } } for(c=0;c<6;c++) { printf("\n"); for(d=0;d<6;d++) { if(past[c][d].mark==1) { printf("%c",past[c][d].trace); } else printf("*"); } } printf("\n"); }
输出结果,唉。。。我尝试了chrome,opera,ie咋都传不了图片啊!!!
运行结果还行,只是历史记忆路径只有一次,如果死胡同需要两步才到底,则它就出不来了,还需要再修改,今天就先到这里,毕竟只是0.2版本,以后的版本还需要把函数封装一下,全用全局变量成何体统。。。祝大家元旦快乐哈~~~
相关文章推荐
- 重回纯C数据结构,迟早要还的。。。记迷宫问题
- 数据结构迷宫问题C++实现
- 数据结构4————递归解决迷宫问题和马踏棋盘
- 2017年数据结构课程设计--迷宫问题
- 数据结构迷宫问题C++实现
- 数据结构--迷宫问题
- 数据结构--用栈求解迷宫问题(非最优解)
- 数据结构----迷宫问题
- [数据结构]求解迷宫最短路径问题
- 【数据结构】用回溯法求解迷宫问题
- 数据结构 C语言 双向链栈 迷宫问题
- 迷宫问题的通用解法C语言数据结构实现
- python数据结构学习笔记-2017-01-08-01-N皇后问题、迷宫问题和跳马问题的递归解决
- .数据结构迷宫问题的文档
- 数据结构例程——迷宫问题(用栈结构)
- 数据结构:栈和队列-迷宫问题求解
- 数据结构——迷宫问题
- 数据结构实践——迷宫问题之图深度优先遍历解法
- 数据结构之迷宫问题
- 数据结构---迷宫问题(不相交集、广度优先搜索)