迷宫问题
程序员文章站
2022-05-20 20:26:06
...
#include <iostream>
typedef struct Node{
int x,y; //行和列
int pre; //前驱节点
}Queue;
const int N=8;
const int M=8;
void path(int (*map)[N+2],int ix,int iy,int ex,int ey){
const int MaxSize=50;
Queue q[MaxSize];
int c_x,c_y;
int i=0,k=0; //i是出队列位置,k是进队列位置
q[0].x=ix; q[0].y=iy;q[0].pre=-1;map[ix][iy]=-1;
while(true){
c_x=q[i].x;c_y=q[i].y;
int l=0;
if(c_x==ex&&c_y==ey){
while(i>=0){
std::cout<<"("<<q[i].x<<","<<q[i].y<<") ";
i=q[i].pre;
l++;
if(l%6==0)
std::cout<<std::endl;
}
return;
}
if(map[c_x][c_y+1]==0){
k++;q[k].x=c_x;q[k].y=c_y+1;q[k].pre=i;map[c_x][c_y+1]=-1;
}
if(map[c_x+1][c_y]==0){
k++;q[k].x=c_x+1;q[k].y=c_y;q[k].pre=i;map[c_x+1][c_y]=-1;
}
if(map[c_x][c_y-1]==0){
k++;q[k].x=c_x;q[k].y=c_y-1;q[k].pre=i;map[c_x][c_y-1]=-1;
}
if(map[c_x-1][c_y]==0){
k++;q[k].x=c_x-1;q[k].y=c_y;q[k].pre=i;map[c_x-1][c_y]=-1;
}
i++;
}
}
int main(){
int map[M+2][N+2]={
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
path(map,1,1,8,8);
return 1;
}
运行结果:
(8,8) (8,7) (8,6) (8,5) (7,5) (6,5)
(6,4) (6,3) (5,3) (5,2) (5,1) (4,1)
(3,1) (2,1) (1,1)
推荐阅读
-
一个神奇的bug导致的连接不释放的问题 博客分类: bug数据库连接不释放Spring springdaoservicedruid
-
如何解决ORA-01843与NLS_DATE_FORMAT问题
-
常见声卡驱动反复安装失败问题的解决方案
-
Mongodb 占用的硬盘空间问题 博客分类: Mongodb
-
关于 Abp 替换了 DryIoc 框架之后的问题
-
手机QQ浏览器省流加速功能如何开启以解决流量不够问题
-
关于Spring一个配置问题的解决noHandlerFound 博客分类: Spring Java WebSpringnoHandlerFound
-
整体刷新和局部刷新frameset窗口问题深入探讨
-
Android ScrollView嵌套横向滑动控件时冲突问题
-
php for 循环思路问题