广搜 解救小哈

 标题      我们要解救小哈,并得到最短的步数,输入m行n列由0和1构成的迷宫,1为怪兽该区域不能走。写出代码得到最短的步数。

输入     

输入m,n。输入由0和1组成的m*n大小的迷宫,输入起点x1,y1。终点x2,y2。

输出

一个常数,y。

代码

#include
using namespace std;
int a[51][51]={0},b[51][51]={0};
struct note
{
    int x;
    int y;
    int f;
    int step;
};
typedef struct note que;
int n,m;
int main(void)
{
    que book[2510];
    int i,j,h,y,x1,x2,y1,y2,steam=0,tail=0,l=0;
    int next[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
    cin>>n>>m;
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
        cin>>a[i][j];
    }
    cin>>x1>>y1>>x2>>y2;
    book[tail].x=x1;
    book[tail].y=y1;
    book[tail].f=0;
    book[tail].step=0;
    b[x1][y1]=1;
    tail++;
    
    while(steam     {
        for(i=0;i<4;i++)
        {
            h=book[steam].x+next[i][0];
            y=book[steam].y+next[i][1];
            if(h>0&&h<=n&&y>0&&y             {
                if(a[h][y]==0&&b[h][y]==0)
                {
                    b[h][y]=1;
                    book[tail].x=h;
                    book[tail].y=y;
                    book[tail].step=book[steam].step+1;
                    tail++;
                }
            }
            if(h==x2&&y==y2)
            l=1;
        }
        if(l==1)
        break;
        steam++;
    }
    cout<     return 0;
 }

你可能感兴趣的:(c++,c语言)