zoukankan      html  css  js  c++  java
  • 题解 CF1141A 【Game 23】

    这题也可以算你咕最水的几道黄题之一了,做题的人大部分都是新手(或者是像我这样喜欢刷水题的人),我就讲的详细一点。

    既然是求最少的步骤,那就肯定首选 BFS,但是题解里没有,那我就发一篇用 STL 的 queue 做的 BFS 吧。

    本题的衍生状态只有两种,即 (n imes2)(n imes3),直接爆搜就可以过。如果 (n) 已经超过了 (m),就剪枝,非常好理解。

    if(now.num*2<=m)   //剪枝,当 n>m 时就没必要继续搜了。 
    {
    	node nex;
    	nex.num=now.num*2;     //num 代表此时的数字。 
    	nex.sum=now.sum+1;     //sum 用来存储所用的步数。 
    	q.push(nex);           //入队 
    }
    if(now.num*3<=m)  //同上 
    {
    	node nex;
    	nex.num=now.num*3;
    	nex.sum=now.sum+1;
    	q.push(nex);
    }
    

    (n=m) 时,根据 BFS 的特性,所需的步骤肯定是最少的,不用像 DFS 一样把所有情况都搜完。此时就可以直接输出,结束程序。

    if(now.num==m)
    		{
    			cout<<now.sum;
    			exit(0);    //exit(0) 和 return 的区别是:return 只能终止当前的函数,exit(0)可以终止整个程序。 
    		}
    

    当 BFS 的函数结束之后程序还在运行,那么就说明无解,输出 -1

    总之,这题是一道极其入门的搜索题,思路简单明了,适合刚学习搜索的小白练手,也可以供各位神犇练习手速。

    上可爱的完整代码:

    #include<bits/stdc++.h>
    using namespace std;
    struct node     //使用结构体。
    {
    	int num,sum;
    }first;
    queue<node> q;   //我爱 STL。
    int n,m;
    inline void bfs()   //inline 是为了加速。
    {
    	while(q.empty()==0)
    	{
    		node now=q.front();
    		q.pop();
    		if(now.num==m)
    		{
    			cout<<now.sum;
    			exit(0);    
    		}
    		if(now.num*2<=m)    
    		{
    			node nex;
    			nex.num=now.num*2;     
    			nex.sum=now.sum+1;     
    			q.push(nex);          
    		}
    		if(now.num*3<=m) 
    		{
    			node nex;
    			nex.num=now.num*3;
    			nex.sum=now.sum+1;
    			q.push(nex);
    		}
    	}
    }
    int main() 
    {
    	cin>>n>>m;
    	if(n>m)
    	{
    		cout<<-1;
    		return 0;
    	}
    	first.num=n;
    	first.sum=0;
    	q.push(first);
    	bfs();
    	cout<<-1;
       return 0;
    }
    

    逃(

  • 相关阅读:
    老毛桃装系统详解
    Eclipse常用快捷键
    oracle数据库查询日期sql语句(范例)、向已经建好的表格中添加一列属性并向该列添加数值、删除某一列的数据(一整列)
    java编程中Properties类的具体作用和使用!
    电感、磁珠和0欧电阻
    AXI总线(转)
    NOR Flash的学习
    allegro中如何添加安装孔(注:在PCB图纸中添加)
    转:一个计算机专业毕业的银行员工工作感受
    Allegro中常见的文件格式
  • 原文地址:https://www.cnblogs.com/win10crz/p/12859692.html
Copyright © 2011-2022 走看看