迷宫问题(bfs)+结构体

定义一个二维数组:

int maze[5][5] = {

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,

};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input
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
Sample Output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ma[6][6];//存储图
int v[6][6];//标记数组
int pre[121];//记录每一个结构体的前一个点
struct node
{
    int x, y;//横纵坐标
}que[36], q, p;
int xx[] = {0, 0, 1, -1};//横坐标的变化,上下左右四个方向
int yy[] = {1, -1, 0, 0};//纵坐标
void show(int a)
{
    int b = pre[a];//指向前一个点
    if(b==0)
    {
        printf("(0, 0)\n");
        printf("(%d, %d)\n", que[a].x, que[a].y);
        return ;
    }
    else
        show(b);
    printf("(%d, %d)\n", que[a].x, que[a].y);
}
void bfs(int a, int b)
{
    int front = 0,rear = 0;
    p.x = a;
    p.y = b;
    v[a][b] = 1;
    pre[0] = -1;
    que[rear++] = p;
    while(front<rear)
    {
        q = que[front];
        if(q.x==4&&q.y==4)//走到终点
        {
            show(front);
            return ;
        }
        for(int i=0;i<4;i++)
        {
            p.x = q.x + xx[i];
            p.y = q.y + yy[i];
            if(p.x<0||p.x>=5||p.y<0||p.y>=5||v[p.x][p.y]==1||ma[p.x][p.y]==1)//不符合条件
                continue;
            pre[rear] = front;
            que[rear++] = p;
            v[p.x][p.y] = 1;
        }
        front++;
    }
    return ;
}
int main()
{
    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
            scanf("%d", &ma[i][j]);
        }
    }
    memset(v, 0, sizeof(v));
    bfs(0, 0);
    return 0;
}
    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/FEATHER2016/article/details/76855761
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞