POJ3278 Catch That Cow 广度优先搜索版

这题有很多实现的算法,我这里使用了广度优先搜索,以起点N为第0层,搜索到的K位于那一层,那最短距离就是那一层。当然了,也可以用动态规划来做,有空补上。以下是广度优先搜索的代码~

/*******************************************************************************
 * Author : Neo Fung
 * Email : neosfung@gmail.com
 * Last modified : 2011-07-15 15:52
 * Filename : POJ3278 Catch That Cow.cpp
 * Description : http://poj.org/problem?id=3278
 * *****************************************************************************/
// POJ3278 Catch That Cow.cpp : Defines the entry point for the console application.
//

// #include "stdafx.h"
// #include <fstream>

#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <deque>
#include <map>
#include <math.h>
#include <algorithm>
#include <numeric>
#include <functional>

using namespace std;

int main(void)
{
// 	ifstream cin("data.txt");
	int N,K;
	int temp,sum,count,level;
	int a,b,c;
	int location[100001];
	memset(location,1,sizeof(location));
	deque<int> mydeque;
	sum=count=level=0;
	int flag=1;
	cin>>N>>K;
	mydeque.push_back(N);
	location[N]=0;
	count=1;
	while(flag)
	{
		sum=0;
		for(int i=0;i<count;++i)
		{
			temp=mydeque.front();
			mydeque.pop_front();
			if(temp==K)
			{
				flag=0;
				break;
			}
			else
			{
				a=temp-1;
				b=temp+1;
				c=temp*2;
				if(a>-1 && location[a])
				{
					mydeque.push_back(a);
					++sum;
					location[a]=0;
				}
				if (location[b])
				{
					mydeque.push_back(b);
					++sum;
					location[b]=0;
				}
				if(c<=100000 && location[c])
				{
					mydeque.push_back(c);
					++sum;
					location[c]=0;
				}
			}
		}
		count = sum;
		++level;
		
	}

	cout<<--level<<endl;

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值