題解 luogu P1588 【丟失的牛】
阿新 • • 發佈:2018-12-02
此題用
bfs
一定要記得特判過10000和小於0!!!
#include<bits/stdc++.h> using namespace std; int head,tail; int a[3][500000]; bool t[500000]; int main() { int i,j,x,y,n,z=0; cin>>n; for (j=1;j<=n;j++) { cin>>x>>y; memset(a,0,sizeof(a)); memset(t,0,sizeof(t)); a[1][1]=x;head=1;tail=1;z=0; while (a[1][head]!=y) { for (i=1;i<=3;i++) if (i==1) {if (t[a[1][head]+1]==0&&a[1][head]+1<=100000){a[1][++tail]=a[1][head]+1;t[a[1][tail]]=1; a[2][tail]=a[2][head]+1;}} else if (i==2) {if (t[a[1][head]-1]==0&&a[1][head]-1>=0){a[1][++tail]=a[1][head]-1;t[a[1][tail]]=1; a[2][tail]=a[2][head]+1;}} else if (i==3) {if (t[a[1][head]*2]==0&&a[1][head]*2<=100000){a[1][++tail]=a[1][head]*2;t[a[1][tail]]=1; a[2][tail]=a[2][head]+1;}} head++; //這一段沒特判不知RE了多少次。。。 } cout<<a[2][head]<<endl; } return 0; }
這題我寫了好久好久啊!