迷宫问题(bfs)+结构体

来源:互联网 发布:知乎日报 离线下载 编辑:程序博客网 时间:2024/06/03 19:02

定义一个二维数组:

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;}
原创粉丝点击