您的位置:首页 > 其它

1335闯迷宫

2016-03-12 17:16 330 查看
/*

此题出自http://ac.jobdu.com/problem.php?pid=1335

用宽度优先搜索进行遍历

*/

#include <cstdio>

#include <iostream>

#include <cstring>

#include <queue>

using namespace std;

int mat[100][100];

int n;

int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};

class Point {

public: int x,y,len;

Point(int x_,int y_,int len_){x=x_;y=y_;len=len_;}

};

int bfs(queue<Point> q)

{

    int x,y;

    Point f(0,0,0);

    q.push(f);

    while(q.size()>0)

    {

        f=q.front();

        q.pop();

        for(int i=0;i<4;i++)

        {

            x=f.x+dir[i][0];

            y=f.y+dir[i][1];

            if(x==n-1 && y==n-1)return f.len+1;

            if(x<=n-1 && y<=n-1 && !mat[x][y] && x>=0 && y>=0)

            {

                mat[x][y]=1;

                q.push(Point(x,y,f.len+1));

            }

        }

    }

    return -1;

}

int main()

{

    while(cin>>n)

    {

        for(int i=0;i<n;i++)

            for(int j=0;j<n;j++)

        {

            cin>>mat[i][j];

        }

        if(mat[0][0]==1)

        {

            cout<<"-1"<<endl;

            continue;

        }

        if(n==1)

        {

            cout<<"0"<<endl;

            continue;

        }

        queue<Point> q;

        cout<<bfs(q)<<endl;

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: