被某人拉进了坑 完完全全被坑一天的题……

题意:





正解思路:

先把每一个点搜一遍 预处理出它能在一步之内到的所有点 并连边

然后用一个类似DP的东西把方案数加起来就搞定了

(其实 也不是很难)

但是

我为什么会挂呢

首先 我想偷个懒,想少写一个BFS 就直接按照原来的边搜过去了

当然错了

查了一上午

(对着数据查 小数据竟然全水过去了!!!)

下午颓了会儿

没发现错,,,,,,

晚上在车上的时候 思考人生

诶呦woc?

有荷叶的时候路径不能简单的加和!

要搞定所有的新边

回家以后 乖乖写了第二个BFS 秒切…….

以下是把我拉近坑的那个人的题解:

所以基本思路 搜索 从起点到原点的路径 是水面的就加1。

所以稍微处理了一下,预处理每一个点的需要加1个荷叶的点。1个就好

然后从原点bfs一遍,遇到可以更新的点即 长度大于新的。就把ans从新赋值并且push进去,如果等于就ans【v】+=ans【u】

所以puts答案就好了。

上午一支不对主要在于。一开始的荷叶处理,我想dfs的搜就有可能绕远了,但是其实每个点是可以重复经过的。可是不加vis就会跪。不如循环着 预处理一下每一个点

看起来她很机智嘛

//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,a[33][33],dis[999],sp,ep;
long long ans[999];
int xx[]={2,2,1,1,-1,-1,-2,-2},yy[]={1,-1,2,-2,2,-2,1,-1};
int first[999],next[99999],v[99999],tot;
bool check(int x,int y){
return x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]!=2;
}
void add(int x,int y){
v[tot]=y,next[tot]=first[x],first[x]=tot++;
}
void BFS(int X,int Y){
int vis[33][33];
memset(vis,0,sizeof(vis));
queue<pair<int,int> >q;
q.push(make_pair(X,Y)),vis[X][Y]=1;
while(!q.empty()){
int x=q.front().first,y=q.front().second;q.pop();
for(int i=0;i<8;i++){
int dx=x+xx[i],dy=y+yy[i];
if(check(dx,dy)&&!vis[dx][dy]){
vis[dx][dy]=1;
if(a[dx][dy]==1)q.push(make_pair(dx,dy));
else add(X*m+Y,dx*m+dy);
}
}
}
}
void bfs(){
queue<int>q;
q.push(sp);memset(dis,0x3f,sizeof(dis));
dis[sp]=0,ans[sp]=1;
while(!q.empty()){
int t=q.front();q.pop();
for(int i=first[t];~i;i=next[i]){
if(dis[v[i]]>dis[t]+1){
dis[v[i]]=dis[t]+1;
ans[v[i]]=ans[t];
q.push(v[i]);
}
else if(dis[v[i]]==dis[t]+1)
ans[v[i]]+=ans[t];
}
}
}
int main(){
memset(first,-1,sizeof(first));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
if(a[i][j]==3)sp=i*m+j;
else if(a[i][j]==4)ep=i*m+j;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
BFS(i,j);
bfs();
if(dis[ep]<=0x3fffff)printf("%d\n%lld",dis[ep]-1,ans[ep]);
else puts("-1");
}

POJ 3271 BFS (大坑)的更多相关文章

  1. poj 3271 Lilypad Pond bfs

    因为有了1的存在,使得问题变得比较难搞了,所以比较简单的做法就是把1去掉,先做一次bfs,处理出每个点能够一步到达的点(一定是1步). 然后就可以在新图上用bfs算出两个点之间的最短路,和最短路的个数 ...

  2. poj 3669 bfs(这道题隐藏着一个大坑)

    题意 在x,y坐标系,有流星会落下来,给出每颗流星落下来的坐标和时间,问你能否从(0,0)这个点到一个安全的位置.所谓的安全位置就是不会有流星落下的位置. 题解: 广搜,但是这里有一个深坑,就是搜索的 ...

  3. poj 3249(bfs+dp或者记忆化搜索)

    题目链接:http://poj.org/problem?id=3249 思路:dp[i]表示到点i的最大收益,初始化为-inf,然后从入度为0点开始bfs就可以了,一开始一直TLE,然后优化了好久才4 ...

  4. poj 2395 bfs/记录路径

    http://poj.org/problem?id=2935 Basic Wall Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  5. Dungeon Master POJ - 2251(bfs)

    对于3维的,可以用结构体来储存,详细见下列代码. 样例可以过,不过能不能ac还不知道,疑似poj炸了, #include<iostream> #include<cstdio> ...

  6. Q - 迷宫问题 POJ - 3984(BFS / DFS + 记录路径)

    Q - 迷宫问题 POJ - 3984 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, ...

  7. POJ 2251 BFS(简单)

    一道三维的BFS Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 24003 Accepted: 9 ...

  8. poj 3026 bfs+prim Borg Maze

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9718   Accepted: 3263 Description The B ...

  9. poj 3635(bfs+优先队列)

    题目链接:http://poj.org/problem?id=3635 思路:本题主要运用的还是贪心思想,由于要求st->ed的最小花费,那么每经过一个城市,能不加油就尽量不加油,用dp[i][ ...

随机推荐

  1. nginx开启gzip压缩后导致apk包下载不能正常安装

    最后更新时间:2019/4/27 nginx一般都会开启gzip压缩,以提升传输性能. 配置如下: gzip on; gzip_comp_level 2; gzip_min_length 1k; gz ...

  2. useradd: cannot open /etc/passwd

    [root@ftp ~]# useradd -g ftp -s/sbin/nologin liwmuseradd: cannot open /etc/passwd [root@ftp ~]# user ...

  3. 【BZOJ 1257】[CQOI2007]余数之和

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] k%i=k-(k/i)i 则∑k%i = nk-∑(k/i)*i 因为k/i是整除运算. 所以会有某一段连续的i,它们的k/i的值都 ...

  4. Java基础学习总结(43)——Java8 Lambda揭秘

    再了解了Java 8 Lambda的一些基本概念和应用后, 我们会有这样的一个问题: Lambda表达式被编译成了什么?. 这是一个有趣的问题,涉及到JDK的具体的实现. 本文将介绍OpenJDK对L ...

  5. centos安全配置

    http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0819/8506.html 引言: 我们必须明白:最小的权限+最少的服务=最大的安全 ...

  6. fileOP

    public void getFileDir(String filePath) { try{ this.tv.setText("当前路径:"+filePath);// 设置当前所在 ...

  7. 从头认识java-18.6 synchronized在其它对象上同步和ThreadLocal来消除共享对象的同步问题

    这一章节我们来介绍在其它对象上同步与ThreadLocal. 前一章节我们使用了 1.synchronized在其它对象上同步 class ThreadA implements Runnable { ...

  8. less05 作用域

    less @clolor:#ffffff; .bgcolor{ width: 50px; a{ color: @clolor; } @clolor:#ff0000; //覆盖,作用域跟js一样,现在局 ...

  9. 8.queue

    #include <iostream> #include <stack> #include <algorithm> #include <list> #i ...

  10. 系统丢失的DLL文件问题根源解决(纯净官网下载放心)(图文详解)(博主推荐)

    导言 最近,身边的朋友们,问我,他电脑的win10系统里 mfc110.dll 丢失. 其他的系统文件丢失修复,是一样的步骤. 现象 大家也许,都会有这么一个习惯,动不动则就去百度上搜索. 其实啊,这 ...