其实bfs本身不难,甚至不需要去学习,只要知道它的特性就可以写出来了。往往,bfs都是用递归做的。递归比循环更容易timeout。所以这次遇到一题bfs,卡时间的就悲剧了。

PAT1076

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define N (1000+10)
#define INF (1<<30)
vector<int> Map[N];
int vis[N];
int Hash[N];
int n,m;
int res,ans[N];
void bfs(vector<int> vi,int cnt)
{
int nsize = vi.size();
if(nsize==) return;
if(cnt == m+){return;}
++cnt;
vector<int> vnext;
for(int i=;i<nsize;++i)
{
int val = vi[i];
vis[val] = ;
//printf("[%d] ",vi[i]+1);
int nMapSize = Map[vi[i]].size();
if(!Hash[val])
{
++res;
Hash[val] = ;
}
for(int j=;j<nMapSize;++j)
if(vis[Map[val][j]]== && Hash[Map[val][j]]==)
{
vnext.push_back(Map[val][j]);
}
}
//printf("\n");
if(vnext.size());
bfs(vnext,cnt);
for(int i=;i<nsize;++i)
vis[vi[i]] = ;
}
int l;
void bfs2(int k)
{
queue<int> qi;
qi.push(k);
int presize = ;
while(!qi.empty())
{
int val = qi.front();
qi.pop();
++res;
vis[val] = ;
for(int i=;i<Map[val].size();++i)
{
int mapval = Map[val][i];
if(vis[mapval]==)
{
vis[mapval] = ;
qi.push(mapval);
//printf("[%d] ",mapval+1);
}
}
--presize;
if(presize==)
{
//printf("\n");
++l;
presize = qi.size();
}
if(l==m+) break;
} res = res > ? res- : ;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<n;++i)
{
int k;
scanf("%d",&k);
for(int j=;j<k;++j)
{
int s=i,e;
scanf("%d",&e);
--e;
//反向
Map[e].push_back(s);
}
}
int k;
scanf("%d",&k);
for(int i=;i<k;++i)
{
int s;
scanf("%d",&s);
--s;
/*vector<int> vi;
vi.push_back(s);
res = 0;
memset(Hash,0,sizeof(int)*(n+10));
memset(vis,0,sizeof(vis));
Hash[s] = 1;
bfs(vi,0);
*/
res = ;
l = ;
memset(vis,,sizeof(vis));
bfs2(s);
printf("%d\n",res);
}
return ;
}

BFS小结的更多相关文章

  1. BFS的小结

    写这类搜索题.首先感觉要有个框架.比如我的框架对于BFS来说(对于DFS,我想有两个一个是递归版一个是栈版).这里是BFS小结.所以介绍一下BFS.我的框架.(也是搜集了网上许多神人的作品.) 1:节 ...

  2. 小结:bfs

    概要: 我们在初始状态要到达终止状态可以沿着同深度的向下搜索,这样范围覆盖更广,在解的深度较小的时候十分适用. 技巧及注意: 所有状态在转移后如果要打标记一定要在进队列前打!不要在出队列才打!否则就是 ...

  3. bfs与dfs小结

    1,bfs适合状态容易存储的题目,如果状态比较难存储,就难以进行记忆化搜索,必然会难以bfs. (比如听说滑雪这个题你用bfs会死得很难看) 2,但是有些题目会很深(比如网格单源最短路),用dfs会跑 ...

  4. POJ 3414 Pots【bfs模拟倒水问题】

    链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...

  5. PatrolRobot(UVa1600)BFS

    PatrolRobot(UVa1600)BFS 珉黻郐距 河吏蝉醉 闵棵黏言 芤她之瞌 褰上稽莨 錾傻奉 郦玫睃芩 摇摇头还没回答魏海洪就抢先回答道:呵呵你们几个别试 蚰镉氡 钬 绦可 ...

  6. 2017河工大校赛补题CGH and 赛后小结

    网页设计课上实在无聊,便开始补题,发现比赛时候僵着的东西突然相通了不少 首先,"追妹"这题,两个队友讨论半天,分好多种情况最后放弃(可是我连题目都没看啊),今天看了之后试试是不是直 ...

  7. 2018年天梯赛LV2题目汇总小结

    Ⅰ.L2-1 分而治之---邻接表 分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案.本题 ...

  8. 深度估计&平面检测小结

    https://yq.aliyun.com/ziliao/582885 最近一段时间已知忙着赶图像分析与理解的项目,在三个星期内强行接触了CNN,MRF,Caffe,openCV在内的很多东西.现在项 ...

  9. 第七十四课 图的遍历(BFS)

    广度优先相当于对顶点进行分层,层次遍历. 在Graph.h中添加BFS函数: #ifndef GRAPH_H #define GRAPH_H #include "Object.h" ...

随机推荐

  1. 轰炸III

    题目背景 一个大小为N*M的城市遭到了X次轰炸,每次都炸了一个每条边都与边界平行的矩形. 题目描述 在轰炸后,有Y个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮. ...

  2. codevs1031 质数环

    一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上的第一个数字总是1.如下图可用1 ...

  3. 20181010关于pt-kill自动杀死运行超长的进程

    转自: http://blog.chinaunix.net/uid-16844903-id-4442030.htmlhttp://blog.chinaunix.net/uid-31396856-id- ...

  4. Mabatis错误--Parameter index out of range

    昨天遇到一个错误,之前也遇到过,但是之前遇到很快就解决了,昨天遇到这个错误当时看了大概10来分钟,还是没搞好,今天才来搞好了. 错误信息如下 08:34:43,302 DEBUG getTeacher ...

  5. 【Nginx】进程模型

    转自:网易博客 服务器的并发模型设计是网络编程中很关键的一个部分,服务器的并发量取决于两个因素,一个是提供服务的进程数量,另外一个是每个进程可同时处理的并发连接数量.相应的,服务器的并发模型也由两个部 ...

  6. 新手学測试----Unit Test(单元測试)

    在程序猿做项目的过程中,每当完毕一个功能,首先自己须要对完毕的功能进行測试.我如今正在做的项目用的工具是VS2012.那么接下来,就说一说在VS2012中是怎样创建单元測试的. 怎样创建单元測试? 在 ...

  7. android 使用post 提交

    1.使用post 方式提交时不要把须要传递的參数写在URL 中,一定要使用 BasicNameValuePair 这个类来完毕 创建我想发送一个类似Get 方式的一个URL ---------- ht ...

  8. 飞思卡尔 imx6 GC0308 摄像头驱动配置调试过程

    GC0308摄像头驱动程序使用的是linux v4l2协议,通过i2c信号进行控制.GC0308摄像头.对上电时序要求非常严格,一定要依据datasheet初始化摄像头. 本驱动使用的3.10内核,所 ...

  9. tomcat的localhost_access_log日志文件

    一.服务器打印日志要关闭hibernate的日志,首先要把hibernate.show_sql设置为false;然后设置log4j.properties. # Control logging for ...

  10. 百度MP3+图片+文字:生成结果文件;(声音58秒,视频59秒,同步性需要进一步优化)

    import os os_sep = os.sep this_file_abspath = os.path.abspath(__file__) this_file_dirname, this_file ...