• POJ3278 Catch That Cow


    题目:http://poj.org/problem?id=3278

    思路:从n到k,每步有3种走法,根本没有发现用bfs可以完美解决问题。方法非常巧。其实也是正常解法,平时做的bfs都是6或8个方向并且是2维的,但是换做3种走法还是一维的就感觉很神奇,说明没有真正理解bfs。这样一说,就更简单了。

    AC代码:

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<cstring>
    const int maxn = 100001;
    using namespace std;
    
    bool vis[maxn];//标记
    int step[maxn];//每个点的步数 
    int n, k;
    
    int bfs(int n, int k) {
    	step[n] = 0;//从n到k,所以step[n] = 0 
    	vis[n] = true;//标记 
    	queue<int> q;
    	q.push(n);
    	int head, next; 
    	while(!q.empty()) {//和平时的bfs队列一样 
    		head = q.front();
    		q.pop();
    		for(int i = 0; i < 3; i++) {//分别对应3种走法 
    			if(i == 0)
    				next = head + 1;
    			else if(i == 1)
    				next = head * 2;
    			else if(i == 2)
    				next = head - 1;
    			if(next >= 0 && next < maxn) {//判断条件 
    				if(!vis[next]) {
    					step[next] = step[head] + 1;//更新 
    					vis[next] = true;//标记 
    					q.push(next);//入队 
    				}
    			}
    			if(next == k)//结果 
    				return step[k];
    		}
    	} 
    }
    
    int main() {
    	while(~scanf("%d%d", &n, &k)) {
    		memset(step, 0, sizeof(step));
    		memset(vis, false, sizeof(vis));
    		if(k <= n)
    			printf("%d
    ", n-k);
    		else
    			printf("%d
    ", bfs(n, k));
    	}	
    }
    
  • 相关阅读:
    Python用户交互
    Python中的变量和常量
    Python的第一个程序:‘Hello World!’
    idea和pycharm激活方法
    Python环境准备(安装python解释器)
    Python简介
    编程与编程语言
    Linux下升级安装Python-3.6.2版本
    yum安装php5.5,php5.6和php7.0
    Postfix邮件黑名单和白名单
  • 原文地址:https://www.cnblogs.com/ACMerszl/p/9572944.html
Copyright © 2020-2023  润新知