java迷宫广度优先搜索,广度优先搜索迷宫路径算法的实现

#include 

#define COL 10

#define ROW 10

#define BOOL int

#define TRUE 1

#define FALSE 0

typedef struct plot

{

int col;

int row;

}Plot;

//迷宫用二维数组来存储,Maze[1][0]为起点,Maze[6][7]为终点,值为1表示墙

int Maze[COL][ROW] = {    {1,1,1,1,1,1,1,1,1,1},

{0,0,0,0,0,0,1,0,0,1},

{1,1,0,1,1,0,1,0,1,1},

{1,1,0,1,0,0,0,0,0,1},

{1,0,0,1,1,0,1,1,0,1},

{1,0,1,0,0,0,1,1,1,1},

{1,0,1,0,1,1,0,0,0,1},

{1,0,1,0,1,1,0,1,0,1},

{1,0,1,0,0,0,0,1,0,0},

{1,1,1,1,1,1,1,1,1,1}};

int head = 0, rear = 0;

int level = 2;

Plot flag_queue[COL * ROW];

void get_path(int x, int y);

void width_flag(int x, int y);

void en_queue(int x, int y);

void out_queue();

BOOL queue_not_empty();

void print_path();

void print_maze();

int main()

{

width_flag(8, 9);

get_path(1, 0);

print_path();

print_maze();

return 0;

}

void get_path(int x, int y)

{

int i = 0;

level = Maze[x][y];

while(level>1)

{

flag_queue[i].col = x;

flag_queue[i].row = y;

i++;

level--;

if(x>0 && Maze[x-1][y]==level)

x--;

else if(y+1

y++;

else if(x+1

x++;

else

y--;

}

level = i;

}

void width_flag(int x, int y)

{

en_queue(x, y);

while(queue_not_empty())

{

x = flag_queue[head].col;

y = flag_queue[head].row;

level = Maze[x][y] + 1;

if(x>0 && Maze[x-1][y]==0)

en_queue(x-1, y);

if(y+1

en_queue(x, y+1);

if(x+1

en_queue(x+1, y);

if(y>0 && Maze[x][y-1]==0)

en_queue(x, y-1);

out_queue();

}

}

void en_queue(int x, int y)

{

Maze[x][y] = level;

flag_queue[rear % (COL * ROW)].col = x;

flag_queue[rear % (COL * ROW)].row = y;

rear = (rear + 1) % (COL * ROW);

}

void out_queue()

{

head = (head + 1) % (COL * ROW);

}

BOOL queue_not_empty()

{

if(head==rear)

return FALSE;

else

return TRUE;

}

void print_path()

{

int i;

printf("\nStart->");

for(i=0; i

printf("(%d,%d)->", flag_queue[i].col, flag_queue[i].row);

printf("end\n\n");

}

void print_maze()

{

int i,j;

for(i=0; i

{

for(j=0; j

printf("%3d",Maze[i][j]);

printf("\n");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值