POJ_3984经典迷宫问题

来源:互联网 发布:手机版导航源码 编辑:程序博客网 时间:2024/04/30 01:26

//记录路径//

AC代码:

#include<stdio.h>#include<string.h>#define max 10int map[max][max];int vis[max][max];int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};struct node{    int x,y;}queue[max*max];int a[max*max];int b[max*max];int cnt;int p[max*max];void print(int k){    int i;    int t=p[k];    if(t==0)    {        printf("(0, 0)\n");        printf("(%d, %d)\n",a[k],b[k]);    }    else    {        print(t);        printf("(%d, %d)\n",a[k],b[k]);    }}void bfs(int x,int y){    struct node now,pre;    queue[0].x=0;    queue[0].y=0;    int e=0,h=1;    p[0]=-1;    while(e<h)    {        pre=queue[e];        if(pre.x==4&&pre.y==4)        {            print(e);            return;        }        int i;        for(i=0;i<4;i++)        {            now.x=pre.x+dir[i][0];            now.y=pre.y+dir[i][1];            if(now.x>=0&&now.x<5&&now.y>=0&&now.y<5&&!vis[now.x][now.y]&&map[now.x][now.y]==0)            {                vis[now.x][now.y]=1;                queue[h]=now;                a[h]=now.x;                b[h]=now.y;                p[h]=e;                h++;            }        }        e++;    }    return;}int main(){    int i,j;    cnt=0;    for(i=0;i<5;i++)    {        for(j=0;j<5;j++)        {            scanf("%d",&map[i][j]);        }    }    memset(vis,0,sizeof(vis));    bfs(0,0);    return 0;}

0 0
原创粉丝点击