迷宫问题怎样才可以得到最短路径:
这里有测试案例:
0-通路,-1为墙,输入为:
测试经过计算机跑过--为:
这样其最短路径为:
核心算法为:
findpath(int ** map,constint &start_x,constint &start_y)
{
int m=start_x,n=start_y;
Queue Q;
iniqueue(&Q);
map[m][n]=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);
}
}
}