POJ3278-Catch That Cow
阿新 • • 發佈:2018-07-11
def ace color 大數 整數 while != div pri
大致題意:
給定兩個整數n和k
通過 n+1或n-1 或n*2 這3種操作,使得n==k
輸出最少的操作次數
解題思路:
三入口的BFS
註意的地方:
由於用於廣搜的 隊列數組 和 標記數組 相當大,如果定義這兩個數組時把它們扔到局部去,編譯是可以的,但肯定執行不了,提交就等RE吧= =
大數組必須開為 全局 。。。常識常識。。。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 #include <queue> 6#define N 100005 7 int n,k; 8 bool mark[N]; 9 int main() 10 { 11 while (scanf("%d %d",&n,&k)!=EOF) 12 { 13 queue<int> q,a; 14 memset(mark,0,sizeof(mark)); 15 q.push(n); 16 a.push(0); 17 mark[n]=1; 18 while (!q.empty()) 19 { 20int temp=q.front(); 21 int ans=a.front(); 22 q.pop(); 23 a.pop(); 24 if (temp==k) 25 { 26 printf("%d\n",ans); 27 break; 28 } 29 if (temp+1<=100000&&!mark[temp+1]) 30 { 31 q.push(temp+1); 32 a.push(ans+1); 33 mark[temp+1]=1; 34 } 35 if (temp-1>=0&&!mark[temp-1])//註意邊界條件temp-1>=0 36 { 37 q.push(temp-1); 38 a.push(ans+1); 39 mark[temp-1]=1; 40 } 41 if (temp*2<=100000&&!mark[temp*2]) 42 { 43 q.push(temp*2); 44 a.push(ans+1); 45 mark[temp*2]=1; 46 } 47 } 48 } 49 50 return 0; 51 }
POJ3278-Catch That Cow