裸BFS题若干

1poj 3278

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

#include<math.h>
#include<algorithm>
#include<string>
#include<string.h>
#include<stdio.h>
#include<iostream>

using namespace std;
#define N 100005
#define M 155
#define INF 0x3f3f3f3f
struct node
{
    int x, t;
}st;
int n, k, a, b, x, y, t, cnt, ans;
bool v[N];

void Bfs(int n)
{
    ans = 0;
    queue<node>q;
    while(!q.empty()) q.pop();
    memset(v, 0, sizeof(v));
    st.x = n;
    st.t = 0;
    q.push(st);
    v[st.x] = 1;

    while(!q.empty())
    {
        node head = q.front();
        q.pop();
        if(head.x == k)
        {
            ans = head.t;
            return;
        }

        for(int i = 0; i < 3; i++)
        {
            node next = head;
            if(i == 0) next.x = head.x + 1;
            else if(i == 1) next.x = head.x - 1;
            else next.x = head.x * 2;

            next.t = head.t + 1;

            if(next.x < 0 || next.x > 100000) continue;
            if(v[next.x] == 1 ) continue;
            // 一开始写成一行,if(v[next.x] == 1 || next.x < 0 || next.x > 100000) continue; 找了好久的bug,以后能分开的还是分开吧,不要省那一两行
            q.push(next);
            v[next.x] = 1;
        }
    }
}

int main()
{
    while(cin>>n>>k){

        Bfs(n);

        cout<<ans<<endl;

    }
    return 0;
}

原文地址:https://www.cnblogs.com/wmxl/p/11107303.html

时间: 2024-10-10 09:27:06

裸BFS题若干的相关文章

USACO 3.2 msquare 裸BFS

又是个裸BFS... 和西安网赛那道1006一样的,只不过加上了要记录方案.顺便复习map 记录方案直接在bfs队列的结点里加一个vector<int> opt,把从开头一直到当前结点的操作序列记下来 1 /* 2 PROB:msquare 3 LANG:C++ 4 */ 5 6 #include <iostream> 7 #include <vector> 8 #include <algorithm> 9 #include <map> 10 #

两个bfs题:逃跑和奇怪的最短路

bfs 搜索状态多加一维表示时间vis[x][y][t]表示t时间能否到达点(x,y)对于每个士兵,预处理出哪些时间哪些点是不可访问 这题看着提示瞎写一通结果过了..恍恍惚惚 #include <cstdio> #include <algorithm> #include <set> #include <map> #include <iostream> #include <string> #include <queue> #

hdu 4707 仓鼠 记录深度 裸bfs

题意:linji的仓鼠丢了,他要找回仓鼠,他在房间0放了一块奶酪,按照抓鼠手册所说,这块奶酪可以吸引距离它D的仓鼠,但是仓鼠还是没有出现,现在给出一张关系图,表示各个房间的关系,相邻房间距离为1,而且图中没有回路,每个房间都是联通的,求仓鼠可能出现的房间的数量. Sample Input110 20 10 20 31 41 52 63 74 86 9 Sample Output2 1 #include <cstdio> 2 #include <algorithm> 3 #inclu

HDU1372:Knight Moves(经典BFS题)

HDU1372:Knight Moves(BFS) Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the shortest closed tour of knight moves that v

木材加工(裸二分题)(附二分算法粗略介绍)

看到旁边的学弟也在做二分,就手贱2分钟打了一道奇(sha)特(bi)二分题. 原题传送门 好吧,做这道题是为了给新手一个教程 首先我们聊聊二分. 二分利用的也是分治思想 不懂分治思想的可以看看我归并做的那道火柴排队. 传送门 首先要了解一下二分的性质(也就是什么题目要用二分来写.) 我们假设一个题目,如果一个数a能够满足题意,并且U=[数值最小值/数值最大值(看题意)~a]中的数就一定能够满足题意. 那么这道题目就能用来二分.. 或者说一道题目的解的解集为U,如0<i<a;题目的范围是0<

tarjan讲解(用codevs1332(tarjan的裸题)讲解)

主要借助这道比较裸的题来讲一下tarjan这种算法 tarjan是一种求解有向图强连通分量的线性时间的算法.(用dfs来实现) 如果两个顶点可以相互通达,则称两个顶点强连通.如果有向图G的每两个顶点都强连通,称G是一个强连通图.有向图的极大强连通子图,称为强连通分量. 在上面这张有向图中1,2,3,4形成了一个强连通分量,而1,2,4,和1,3,4并不是(因为它们并不是极大强连通子图). tarjan是用dfs来实现的(用了tarjan后我们就可以对图进行缩点(当然这道裸题用不到)) 这道题只要

hdoj 5094 Maze 【BFS + 状态压缩】 【好多坑】

Maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Others) Total Submission(s): 901    Accepted Submission(s): 314 Problem Description This story happened on the background of Star Trek. Spock, the deputy captain of St

hdu1240 三维搜索 bfs dfs都可以

题意,给出一个N,这是这个三空间的大小,然后给出所有面的状况O为空地,X为墙,再给出起始点的三维坐标和终点的坐标,输出到达的步数三维的BFS,很裸的题,不过一定要注意这一题给的坐标x表示列,y表示行,z表示层,实际输入的时候调试一下看看给的坐标是不是跟样例在图中所指的对象一样就行了.http://blog.csdn.net/iaccepted/article/details/23277717bfs讲得好http://iprai.hust.edu.cn/icl2002/algorithm/algo

[BZOJ 1054][HAOI 2008]移动玩具(BFS+判重)

题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1054 真是水题,感谢HAOI送的福利样例23333 裸BFS,用string做判重,会八数码就会这题. 注意由于队列中状态数很多,一定要把队列的数组开大点!!! #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <