迷宫问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0 0 1 1 1 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 0 0 0
1 0 1 1 1 0 0 0
0 0 1 1 0 0 1 1
0 0 0 0 0 0 0 0
for(i=0;i<n+2;i++) for(j=0;j<m+2;j++) maze[i][j]=1; for(i=1;i<=n;i++) for(j=1;j<=m;j++) 二、规定入口和出口 上图 a11表示入口,anm表示出口。 printf("输入入口和出口"); scanf("%d%d%d%d",&x1,&y1,&x2,&y2); scanf("%d",&maze[i][j]);
思考: 思考:
如何选择一条最短的路径? ——电路布线问题(P165)
完!
代码分析: 代码分析:
int Mazepath() { int maze[n+2][m+2],i,j,k,x1,x2,y1,y2; Mlink *p; printf("建立迷宫矩阵:"); for(i=0;i<n+2;i++) for(j=0;j<m+2;j++) maze[i][j]=1; for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&maze[i][j]);
else if(maze[Stack->row][Stack->col-1]==0) {p=()malloc(); p->row=Stack->row;p->col=Stack->col-1; p->next=Stack;Stack=p; maze[Stack->row][Stack->col]=1; } else if(maze[Stack->row-1][Stack->col]==0) {p=()malloc(); p->row=Stack->row-1;p->col=Stack->col; p->next=Stack;Stack=p; maze[Stack->row][Stack->col]=1; }
printf("输入入口和出口 输入入口和出口"); 输入入口和出口 scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
Stack=NULL; p=()malloc(); p->row=x1;p->col=y2;
Fra Baidu bibliotek
p->next=Stack; Stack=p; maze[Stack->row][Stack->col]=1;
迷宫问题
09 网工(1) 徐娟娟
算法分析
一、迷宫何来:如何建立迷宫,怎样的迷宫——n*m的 矩阵用户自定义障碍位置初始化矩阵时0表示通路,1表 示障碍物; int maze[n+2][m+2]; //迷宫的建立需要在其外 围设置一圈的障碍,为 了的是方便边缘节点处 向不同方向的探索处理 方法相同!!
else {p=Stack;Stack=Stack->next;free(p);}
}
if(Stack==NULL) return 0; else return 1; } void main() {int Mlink *p=Stack; if(Mazepath()) { p=Stack;printf(); while(p!=NULL) {printf("(%d,%d)->",p->row,p->col); p=p->next;} } }
2、方向的选择: 老鼠的当前位置对应数组元素为m[i][j] ,则判断 m[i][j+1],m[i+1][j],m[i][j-1],m[i-1][j]是否为1既是 从当前位置(i,j)分别向东西南北方向判断是否 有障碍!
算法思想
1、将入口位置(1,1)入栈,并向其四周进行探索,探 索到下一位置B,同时把位置(1,1)设置成障碍以阻止 下一步的搜索经过这个位置,把B设为障碍压入栈; 2、从B向四周进行探索, 若找到通路将搜索线移至通路 C,将C设为障碍并压入栈; 3、从C同步骤2进行探索,但若是探索了四个方向,未 找到出路,则需要弹出C回到B处重新选折方向(C的方 向无需在探索了)寻找新的路径; 4、同(2)(3)进行后面的路径探索直到找到出口!
三、如何存储迷宫老鼠所搜索的路径,以便当遇障 碍时能换方向探索,或无路可走路时能退至走过的 某个路口重新选择新的探讨方向——栈! 1、迷宫中每一步的描述即栈中节点的描述 typedef struct node{ int row; int col; struct node *next; }Mlink;
}
while(Stack->row!=x2&&Stack->col)!=y2||Stack!=NULL) { if(maze[Stack->row][Stack->col+1]==0) { p=()malloc(); p->row=Stack->row; p->col=Stack->col+1; p->next=Stack;Stack=p; maze[Stack->row][Stack->col]=1; } else if(maze[Stack->row+1][Stack->col]==0) {p=()malloc(); p->row=Stack->row+1; p->col=Stack->col; p->next=Stack; Stack=p; maze[Stack->row][Stack->col]=1; }