【BFS】(一)抓住那頭牛(poj 3278)
阿新 • • 發佈:2019-01-03
- 思路
open表 用queue模板
closed表 用MAXN長的一維陣列即可
人的位置是起點,牛的位置是終點。走一步形成雙向邊,跳著走(乘2)形成單向邊,畫出圖。(需要查重。)然後愉快的bfs即可。
- 程式碼如下:
#include <cstdio>
#include <queue>
using namespace std;
int closed[100001];
int n,k;
int dfs()
{
queue<int> open;
//int depth = 0;
open.push(n);
int cur;
closed[n] = 0 ;
int x[3];//move
while(open.size()){
cur = open.front();
open.pop();
if(cur == k)break;
x[0] = cur + 1;
x[1] = cur - 1;
x[2] = cur * 2;
for(int i=0;i<3;i++)
if(x[i]>=0&&x[i]<=100000&&closed[x[i]]==-1){
open.push(x[i]);
closed[x[i]] = closed[cur] + 1 ;
}
}
return closed[cur];
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<=100000;i++)
closed[i] = -1;
int res = dfs();
printf("%d\n",res);
return 0;
}
AC~