SDUT-2779 找朋友(常规BFS)

来源:互联网 发布:浙江省软件行业协会 编辑:程序博客网 时间:2024/06/08 17:38

找朋友

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss

Problem Description

X,作为户外运动的忠实爱好者,总是不想呆在家里。现在,他想把死宅Y从家里拉出来。问从X的家到Y的家的最短时间是多少。
为了简化问题,我们把地图抽象为n*m的矩阵,行编号从上到下为1 到 n,列编号从左到右为1 到 m。矩阵中’X’表示X所在的初始坐标,’Y’表示Y的位置 , ’#’表示当前位置不能走,’ * ’表示当前位置可以通行。X每次只能向上下左右的相邻的 ’*’ 移动,每移动一次耗时1秒。

Input

多组输入。每组测试数据首先输入两个整数n,m(1<= n ,m<=15 )表示地图大小。接下来的n 行,每行m个字符。保证输入数据合法。

Output

若X可以到达Y的家,输出最少时间,否则输出 -1。

Example Input

3 3X#Y***#*#3 3X#Y*#*#*#

Example Output

4-1

Hint

 不知道为什么

Author

zmx
//Accpet
#include <bits/stdc++.h>using namespace std;char c[22][22];int d[4][2]= {{1,0},{-1,0},{0,-1},{0,1}},n,m;int Map[22][22];struct node{    int x,y;    int t;} p,q;void BFS(int s1,int s2){    queue<node>Q;    p.x=s1;    p.y=s2;    p.t=0;    Q.push(p);    Map[s1][s2]=1;    while(!Q.empty())    {        q=Q.front();//这里是q=Q.front()或者是p=Q.front()都行。。。。        Q.pop();        if(c[q.x][q.y]=='Y')        {            cout<<q.t<<endl;            return;        }        for(int i=0; i<4; i++)        {            p.x=q.x+d[i][0];            p.y=q.y+d[i][1];            p.t=q.t+1;            /*可拆成两个if:            if(p.x<0||p.x>n-1||p.y<0||p.y>m-1)            continue;            if(!Map[p.x][p.y]&&c[p.x][p.y]!='#')            {            Map[p.x][p.y]=1;            Q.push(p);            }            */            if(!Map[p.x][p.y]&&c[p.x][p.y]!='#'&&p.x>=0&&p.x<n&&p.y>=0&&p.y<m)            {                Map[p.x][p.y]=1;                Q.push(p);            }        }    }    cout<<"-1"<<endl;    return;}int main(){    int i,j,flag;    while(cin>>n>>m)    {        flag=0;        memset(Map,0,sizeof(Map));        for(i=0; i<n; i++)        {            for(j=0; j<m; j++)                cin>>c[i][j];        }        for(i=0; i<n; i++)        {            for(j=0; j<m; j++)            {                if(c[i][j]=='X')//注意找X的方法                {                    flag=1;                    break;                }            }            if(flag==1)break;        }        BFS(i,j);    }    return 0;}


原创粉丝点击