首页 > 其他分享 >1100. 抓住那头牛(bfs)

1100. 抓住那头牛(bfs)

时间:2023-06-16 22:56:54浏览次数:47  
标签:头牛 vis int bfs start 1100 include

https://www.acwing.com/problem/content/1102/

数据范围为1e5

实际上还可以再继续细分,加入特判来优化耗时,但是意义不大

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>

using namespace std;


const int N = 1e5+10;

int n,k;
bool vis[N];
int res[N];
int d1[3]={-1,1,2};

void bfs(int start)
{
	queue<int>q;
	q.push(start);
	vis[start]=true;
	while(q.size())
	{
		int t=q.front();
		q.pop();
		for(int i=0;i<3;i++)
		{
			int now;
			if(i==2)now=t*2;
			else now=t+d1[i];
			if(now >=0 && now <= N && !vis[now])
			{
				q.push(now);
				vis[now]=true;
				res[now]=res[t]+1;
			}	
		}
		if(t==k)return;
	}
}

int main()
{
	cin >> n >> k;
	
//	if(n>=k)//这里可以加一个特判
//	{
//		cout << n-k << endl;
//		return 0;
//	}
	bfs(n);
	
	cout << res[k] << endl;
}

 

标签:头牛,vis,int,bfs,start,1100,include
From: https://www.cnblogs.com/lxl-233/p/17486644.html

相关文章

  • 马的遍历(对bfs的更深一层探讨)
    题目描述有一个 n×m 的棋盘,在某个点 (x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。输入格式输入只有一行四个整数,分别为 n,m,x,y。输出格式一个 n×m 的矩阵,代表马到达某个点最少要走几步(不能到达则输出 −1)。输入输出样例输入#1复......
  • 信奥一本通题1100:金币
    1100:金币解题思路:根据题意:1、国王将金币作为工资,发给骑士。第一天:骑士获得1金币第二天:骑士获得2金币第三天:骑士获得2金币第三天:骑士获得3金币第四天:骑士获得3金币第五天:骑士获得3金币......以此类推,第N天每天收到N枚金币,N+1天收到N+1枚金币从题意可以发现:金币为1,只......
  • 图的BFS与DFS
    图Graph1.图的基本介绍1.1为什么要有图众所周知,数据结构中已经有线性表和树结构,但是线性表局限于一个直接前驱和一个直接后继的关系(eg.链表),树也只能有一个直接前驱(即父节点),当我们需要表示多对多的关系时,就需要用到图这个数据结构。1.2举例说明图是一种数据结构,其中节点可......
  • ACM-ICPC Nanjing Onsite 2018 - K(随机枚举+四维bfs)
    题目链接:https://nanti.jisuanke.com/t/33680 解题思路:随机两个袋鼠的位置,使得让他们相遇,那么这个操作就是一个四维的bfs,前两维代表第一只袋鼠的位置,后两维表示第二只袋鼠的位置。这样随机枚举最多是N*M次。所以时间复杂度最最最最坏情况也就O(N^3*M^3)。 #include<bits/stdc+......
  • hdu 4101(bfs+博弈)
    题意:题目的意思就是说两个人轮流玩游戏,给你一张地图,这个地图中间有一点-1代表宝藏,AliandBaba轮流走路,如果某一个人能够直接走到宝藏的话,那么他就赢了。地图上其它的点0代表空地,数字代表当前地点的石子当某一人拿石子的时候,他只能拿走一颗。问你谁最后能拿到宝藏;解题思路:宝藏位于-......
  • 005 BFS_广度优先搜索
    核心就是利用队列Q:如何区分下一层?A:将当前队列中的所有节点进形扩散框架//计算从起点start到终点target的最近距离intBFS(Nodestart,Nodetarget){Queue<Node>q;//核心数据结构Set<Node>visited;//避免走回头路q.offer(start);//将起点......
  • hdu 3681(bfs+dfs+状态压缩)
    解题思路:这道题属于图上来回走的问题,可以把重复走的过程弱化,即只强调从u->v的结果,中间经过的节点都不考虑。这道题里面'G','F','Y'是重要的节点,其余的点我们是可以忽略的,也就是说,假设从u->v,我们只需要知道最短路径是多少就可以了,至于是怎么走的,中间绕过了多少个'D'都不是我们关心的......
  • hdu 4012(bfs+位压缩)
    思路:每次涂色以后必有一个格子的颜色是最终的颜色,否则这次涂色根本没意义,所以我们把每次涂色后哪些格子成为最终颜色的所有可能都入队,入队的元素是一个struct包含步数和最终颜色已确定的木块集合,这个集合必须用整数表示,所以用到状态压缩,因为最多只有16个格子,所以用16位的二进制来表......
  • poj 2415(BFS)
    题意: 有一种游戏,共有三个piece(不妨称为棋子),棋盘是由N个点构成的完全图,边有颜色。每次可以移动一个棋子,移动时必须满足棋子走过的边的颜色和其他两个棋子之间的连边的颜色一致。求把三个棋子移到同一个顶点的最少次数。这道题是一个很简单的BFS,但为何一直TLE。。。。#include<ios......
  • poj 1324(BFS+状态压缩)
    解题思路:这道题一开始的想法就是状态压缩,即考虑如何判重,由于蛇并非是直线的,所以想到了以每一个点的上下左右共四个值来表示相对位置。最开始想如何用四进制来表示它,无语。。。。。还是题目做少了,直接用两位来表示一个点即可(两位的二进制数可以表示0-3)。剩下的关键就是判断蛇头会不......