hdu_1548 A strange lift

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548

分析:广度优先搜索。对满足条件的楼层入队列,第一次得到的目的楼层一定是最少次数到达的。

我的代码:

#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
struct Node
{
    int floor;  //楼层数
    int k;      //在本楼可走的步数。
    int num;
};
int n,s,e; //楼数,起始点,结束点。
Node p[205];
bool visited[205];
queue<Node> Q;
bool flag;
int ans;
void BFS()
{
    while(!Q.empty()) Q.pop();
    p[s].num=0;
    Q.push(p[s]);
    visited[s]=1;
    while(!Q.empty())
    {
        Node T=Q.front();
        Q.pop();
        if(T.floor==e)
        {
            flag=1;
            ans=T.num;
        }
        int nfloor;
        nfloor=T.floor+T.k;  //向上走
        if(nfloor<=n&&!visited[nfloor]) //要先判断nfloor是否溢出,不然的话数组会越界。
        {
            visited[nfloor]=1;
            p[nfloor].num=T.num+1;
            Q.push(p[nfloor]);
        }
        nfloor=T.floor-T.k;  //向下走
        if(nfloor>=1&&!visited[nfloor])
        {
            visited[nfloor]=1;
            p[nfloor].num=T.num+1;
            Q.push(p[nfloor]);
        }

    }
}
int main()
{

    while(~scanf("%d",&n)&&n)
    {
        scanf("%d%d",&s,&e);
        int i;
        for(i=1;i<=n;i++)
        {
            scanf("%d",&p[i].k);
            p[i].floor=i;
            p[i].num=0;
            visited[i]=0;
        }
        flag=false;
        BFS();
        if(flag) printf("%d\n",ans);
        else     printf("-1\n");
    }


    return 0;
}

总结:开始时没有开visited数组,没有标志导致 Memory Limit Exceeded  -_-|||


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值