zoukankan      html  css  js  c++  java
  • NOI-2971 抓住那头牛题解

    题目传送门

    第一次用(bfs),卡了我好几天(没错,你没有听错),才发现自己想象中的(bfs)与真实的(bfs)的差别

    (bfs)是一层一层的,将每一层都入队,所以最外面的(while)循环判断条件是队列非空

    每一个节点都可以作为父节点在队列后加几种可能性去搜索

    需要判重

    判重数组可以与存储答案的数组合并

    最后输出(f_m)

    #include<iostream>
    #include<queue>
    #include<cstring>
    using namespace std;
    queue<int> a;//队列
    int flag[205005];//判重
    int main()
    {
    	memset(flag,-1,sizeof(flag));//初始化
    	int n,m;
    	cin>>n>>m;
    	if(n==m)//相等的情况
       {
    		cout<<0;
    		return 0;
    	}
    	a.push(n);//压入初始点
    	flag[n]=0;//第0步
    	while(!a.empty())//非空
    	{
    		int temp=a.front();//取出队首
    		a.pop();
    		if(temp==m)
    			break;//到达即推出
    		if(temp*2<200005&&flag[temp*2]==-1)
    			a.push(temp*2),flag[temp*2]=flag[temp]+1;//判断边界与判断重复
    		if(temp+1<=m&&flag[temp+1]==-1)//一个剪枝与判断重复
    			a.push(temp+1),flag[temp+1]=flag[temp]+1;
    		if(temp-1>=0&&flag[temp-1]==-1)//边界与重复
    			a.push(temp-1),flag[temp-1]=flag[temp]+1;
    	}
    	cout<<flag[m];//输出答案
    	return 0;
    }
    

    注:此乃笔记

    我要拿金牌!
  • 相关阅读:
    JSON的使用总结
    pc端分页插件的使用
    简单修改选择文件样式
    H5中的本地存储
    H5中的 meta 标签及 移动页面单位
    1001. A+B Format (20)
    查看mysql的注册表路径
    win10 64位安装mysql
    [POLITICS] S Korea lawmakers vote to impeach leader
    5-17 Hashing (25分)
  • 原文地址:https://www.cnblogs.com/jerrywang-blogs/p/14900445.html
Copyright © 2011-2022 走看看