杭电 HOJ 1548 A strange lift 解题报告

    搜索,广度优先。

    之前使用的遍历超时了,没办法,学习了队列的写法。以下代码源自网上,改了一点,AC

#include<iostream>

#include<deque>

using namespace std;

int main()

{

    int i,a,b,n,x,y,s[201],t[201];

    deque<int> q;

    while(cin>>n && n)

    {

        q.clear();

        memset(t,0,sizeof(t));

        cin>>a>>b;

        for(i=1;i<=n;i++)

            cin>>s[i];

        q.push_back(a);

        x=q.front();

        t[x]=1;

        while(x!=b)

        {

            y=s[x];

            if(x+y<=n&&!t[x+y])

            {

                q.push_back(x+y);

                t[x+y]=t[x]+1;

            }

            if(x-y>=1&&!t[x-y])

            {

                q.push_back(x-y);

                t[x-y]=t[x]+1;

            }

            q.pop_front();

            if(q.empty())

                break;

            x=q.front();

        }

        cout<<(x==b?t[x]-1:-1)<<endl;

    }

}

 

你可能感兴趣的:(if)