#include<stdio.h>
#define MAX_ROW 5
#define MAX_COL 5
struct point {int row, col,pre} queue [512];
int head,tail=0;
void enqueue(struct point p)
{
tail++;
queue[tail]=p;
}
struct point dequeque(void)
{
head++;
return queue[head-1];
}
int is_empty()
{
return head==tail;
}
/***maze***/
int maze[MAX_ROW][MAX_COL] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
void visit(int row,int col)
{
struct point p={row,col,head-1};
maze[row][col]=2;
enqueue(p);
}
void pirnt_maze()
{
int i,j;
for(i=0;i<MAX_ROW;i++){
for(j=0;j<MAX_COL;j++){
printf("%d ",maze[i][j]);
}
printf("\n");
}
printf("****************");
}
int main(void)
{
/*base case*/
struct point p={0,0,-1};
enqueue(p);
maze[p.row][p.col]=2;
/*search*/
while(!is_empty()){
p=dequeue();
if(p.row==MAX_ROW&&p.col==MAX_COL)
break;
if(p.col<MAX_COL-1&&maze[p.row][p.col+1]==0)
visit(p.row,p.col+1);
if(p.col>0&&maze[p.row][p.col-1]==0)
visit(p.row,p.col-1);
if(p.row>0&&maze[p.row-1][p.col]==0)
visit(p.row-1,p.col);
if(p.row<MAX_ROW-1&&maze[p.row+1][p.col]==0)
visit(p.row+1,p.col);
print_maze();
}
/*print result*/
if(p.row==MAX_ROW-1&&p.col==MAX_COL-1){
while(p.pre!=-1){
p=queue[p.pre];
printf("(%d,%d)\n",p.row,p.col);
}
}else{
printf("not path");
}
return 0;
}
迷宫(伪代码)
最新推荐文章于 2022-09-28 22:17:28 发布