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写的这个代码
最最后三无马儿不撸真可爱啊