Catch That Cow POJ - 3278

看其他人博客的代码都好复杂的样子,我看到了一个看起来很简单的代码,不是我写的,但是我还是打算贴在这里分享一下。

好吧不是分享一下,我知道我博客没人看,就是想吐槽一下……

#include<iostream>
using namespace std;
#include<cstring>
#include<queue>
int B[100000+10];
int n,k;
int d[3]={-1,1,0};
int BFS()
{
    memset(B,-1,sizeof(B));
    B[n]=0;
    queue<int> q;
    q.push(n);
    while (!q.empty())
    {
        int x=q.front();
        q.pop();
        if(x==k)
        break;
        d[2]=x;
        for(int i=0;i<3;i++)
        {
            int y=x+d[i];
            if(y>=0&&y<=100000&&B[y]==-1)
            {
                B[y]=B[x]+1;
                q.push(y); 
            }
        }
    }
    return B[k]; 
}
int main()
{
    cin>>n>>k;
    cout<<BFS()<<endl;
    return 0;
}

 

 

隶书字体不好看,换一个

好多人说这个不剪枝会RT,我一开始看到这个代码我还以为这不是不剪枝也过了吗!后来发现重点在于B[y]!=-1;这个其实也就是剪枝了,但是这不是很好想嘛,如果在此之前已经到过这一点了,那么之前那种走法走的步数肯定要比这一回的少啊,所以我就忽略了这其实是个剪枝……还有那个y>=0&&y<=100000应该也是出于不能超过数组范围的考虑,总感觉是完全没考虑剪枝但是却达到了剪枝的效果(我也不知道我以上这堆说的对不对……大概就是这个意思吧……)

 

最后感谢cqw写的这个代码

 

最最后三无马儿不撸真可爱啊

posted @ 2017-08-21 21:41  时荣  阅读(141)  评论(0编辑  收藏  举报