1. 程式人生 > >【BFS】(一)抓住那頭牛(poj 3278)

【BFS】(一)抓住那頭牛(poj 3278)

  • 思路
    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~