走迷宫 bfs

来源:互联网 发布:利为汇seo营销培训 编辑:程序博客网 时间:2024/05/22 08:13


z//走迷宫,bfs
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define n 4 //行
#define m 4 //列

typedef struct dNode
{
    int x;
    int y;
    int step;
} Node;
//表示上下左右四个操作
int u[4] = {0,0,-1,1};
int v[4] = {-1,1,0,0};

int vis[100][100];
int a[100][100];

int bfs(int nx,int ny,int tx,int ty)
{

    Node q[100000];
    int head = 0,tail = 1,k,i,j;
    Node d;
    d.x = nx;
    d.y = ny;
    d.step = 0;

    q[tail] = d;
    while(head <= tail)
    {
        ++ head;
        Node nd = q[head];
        vis[nd.x][nd.y] = 1;
        for(k = 0; k < 4; k ++)
        {
            int cx = nd.x + u[k];
            int cy = nd.y + v[k];
            if(cx <= m && cx >= 1 && cy <= n && cy >= 1 && !vis[cx][cy] && a[cx][cy] == 0)
            {
                Node cd;
                cd.x = cx;
                cd.y = cy;
                cd.step = nd.step + 1;
                q[++ tail] = cd;
                vis[cx][cy] = 1;
                if(cx == tx && cy == ty)
                {
                    return cd.step;
                }
            }
        }
    }
}
int main()
{
    int i,j,a1,b,c,d;
    int nx,ny,tx,ty;
    for(i = 1; i <= n; ++ i)
        for(j = 1; j <= m; ++ j)
        {
            scanf("%d",&a[i][j]);//0表示路,1表示墙
        }
    scanf("%d %d %d %d",&a1,&b,&c,&d);
    printf("%d",bfs(a1,b,c,d));
    scanf("%d",&i);
    return 0;
}

0 0
原创粉丝点击