POJ 迷宫问题+基础bfs

来源:互联网 发布:淘宝价格用什么字体 编辑:程序博客网 时间:2024/06/10 09:27

这里写图片描述

#include"stdio.h"#include"stdlib.h"struct dd{    int x;    int y;};int  map[5][5];int dir[4][2]={1,0,-1,0,0,1,0,-1};          //方向 struct dd queue[50],record[5][5];           //队列和路径 void bfs(){    struct dd next,current;   //表示下一个节点的坐标,表示当前节点     int head,end,i;    head=end=0;                             current.x=queue[end].x;   //将第一个放进队列的元素设为当前    current.y=queue[end].y;     end++;    while(head<end)    {        current=queue[head++];                    for(i=0;i<4;i++)                //从四个方向开始选取路径         {            next.x=current.x+dir[i][0];            next.y=current.y+dir[i][1];            if(next.x<5&&next.y<5&&next.x>=0&&next.y>=0&&map[next.x][next.y]==0)            {                record[next.x][next.y].x=current.x;         //保存第一个到达这个点的坐标(因为当next被走过之后会被标记                record[next.x][next.y].y=current.y;             //因此不用担心会被其他的节点访问)                 if(next.x==4 && next.y==4)                {                    return ;                }                else                {                    queue[end++]=next;                    map[next.x][next.y]=1;                 }            }        }     }}int main(){    int i,j,m,n,k;    for(i=0;i<5;i++)    for(j=0;j<5;j++)    {        scanf("%d",&map[i][j]);    }    map[0][0]=1;            //将起点标记为走过     queue[0].x=0;            //将起点入队     queue[0].y=0;    bfs();    i=j=4;    k=0;    queue[k].x=4;    queue[k++].y=4;    while(i!=0||j!=0)                //将从终点到起点的路径保存            {        m=i;n=j;        i=record[m][n].x;        j=record[m][n].y;        queue[k].x=i;        queue[k++].y=j;    }    for(i=k-1;i>=0;i--)    {        printf("(%d, %d)\n",queue[i].x,queue[i].y);    }    return 0;}
1 0
原创粉丝点击