回溯法-bfs--迷宫问题的最短路径
2017-08-27 11:48
246 查看
迷宫问题怎样才可以得到最短路径:
这里有测试案例:
0-通路,-1为墙,输入为:
测试经过计算机跑过--为:
这样其最短路径为:
核心算法为:
findpath(int ** map,constint &start_x,constint
&start_y)
{
int m=start_x,n=start_y;
Queue Q;
iniqueue(&Q);
map[m]
=1;
//表示已经走过了;
node *p=(node *)malloc(sizeof(node));
p->x=m;
p->y=n;
p->steps=0;
Enqueue(&Q, p);
node *s=(node*)malloc(sizeof(node));
node *temp=(node*)malloc(sizeof(node));
while(Q.size!=0)
{
Dequeue(&Q,s);
if(s->x==N-1&&s->y==M-1)
break;
for(int k=0;k<4;k++)
{
temp->x=s->x+x[k];
temp->y=s->y+y[k];
//方向选择,如果符合通路,入队
if(check(temp->x, temp->y)==0&&map[temp->x][temp->y]==0)
{
//check函数防止其中边界,不出边界返回为0
temp->steps=s->steps+1;
map[temp->x][temp->y]=temp->steps;
Enqueue(&Q, temp);
}
}
}
}
大家在思考一下怎样打印最短路径,当然是利用回溯法,这样也会非常简单,就会知道,要打印它,就只需要知道它的前驱节点,这样打印不会出错。打印其实可以参考我的前面的回溯迷宫问题的核心算法,这里的steps其实就是一个index,很好解决问题。
希望各位前辈多多指教。
加上一个测试完整案例:
这里有测试案例:
0-通路,-1为墙,输入为:
测试经过计算机跑过--为:
这样其最短路径为:
核心算法为:
findpath(int ** map,constint &start_x,constint
&start_y)
{
int m=start_x,n=start_y;
Queue Q;
iniqueue(&Q);
map[m]
=1;
//表示已经走过了;
node *p=(node *)malloc(sizeof(node));
p->x=m;
p->y=n;
p->steps=0;
Enqueue(&Q, p);
node *s=(node*)malloc(sizeof(node));
node *temp=(node*)malloc(sizeof(node));
while(Q.size!=0)
{
Dequeue(&Q,s);
if(s->x==N-1&&s->y==M-1)
break;
for(int k=0;k<4;k++)
{
temp->x=s->x+x[k];
temp->y=s->y+y[k];
//方向选择,如果符合通路,入队
if(check(temp->x, temp->y)==0&&map[temp->x][temp->y]==0)
{
//check函数防止其中边界,不出边界返回为0
temp->steps=s->steps+1;
map[temp->x][temp->y]=temp->steps;
Enqueue(&Q, temp);
}
}
}
}
大家在思考一下怎样打印最短路径,当然是利用回溯法,这样也会非常简单,就会知道,要打印它,就只需要知道它的前驱节点,这样打印不会出错。打印其实可以参考我的前面的回溯迷宫问题的核心算法,这里的steps其实就是一个index,很好解决问题。
希望各位前辈多多指教。
加上一个测试完整案例:
相关文章推荐
- 迷宫最短路径问题-BFS
- POJ 3984---迷宫问题(BFS,迷宫最短路径且输出路径)
- 迷宫最短路径问题(BFS)
- POJ-3984迷宫问题(典型BFS找最短路径)
- POJ 3984 迷宫问题(BFS:迷宫最短路径且输出路径)
- poj 3984迷宫问题(bfs求最短路径 类似并查集保存上个节点 保存最短路径)
- BFS解迷宫问题,并打印最短路径
- BFS 迷宫的最短路径问题
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
- OJ 3984 迷宫问题(BFS:迷宫最短路径且输出路径)
- POJ 3984 迷宫问题【迷宫最短路径 bfs】
- POJ 3984 迷宫问题【迷宫最短路径 bfs】
- 迷宫问题之最短路径bfs
- poj3984迷宫问题 广搜+最短路径
- bfs之迷宫最短路径
- POJ 3984 迷宫问题【bfs路径打印】
- 迷宫最短路径问题(maze)acmclub.com 1102
- POJ - 3984 迷宫问题 —— BFS记录路径
- 迷宫最短路径(bfs)
- poj 迷宫问题(路径记录)(DFS,BFS)