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


正解思路:
先把每一个点搜一遍 预处理出它能在一步之内到的所有点 并连边
然后用一个类似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");
}

转载于:https://www.cnblogs.com/SiriusRen/p/6532252.html

POJ 3271 BFS (大坑)相关推荐

  1. poj 3271 Lilypad Pond bfs

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

  2. POJ - 3026(BFS+最小生成树.krustal)

    题目: 题目链接: http://poj.org/problem?id=3026 Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  3. POJ 3322 BFS

    题意 传送门 POJ 3322 Bloxorz I 题解 长方体当前的状态为其横.纵坐标与摆放状态组成的三元组,为了方便表示,只取长方体左上方的位置作为横.纵坐标状态,BFSBFSBFS 求解即可. ...

  4. POJ - 3984+POJ - 3414(BFS+路径记录)

    题目一 迷宫问题 题目链接: http://poj.org/problem?id=3984 题目: Description 定义一个二维数组: int maze[5][5] = {0, 1, 0, 0 ...

  5. poj 1426 BFS

    一个数n,求一个数m,m由0和1构成,且是n的倍数,若存在多个可任意输出一个即可 数字不会超过19位,用long long int保存. #pragma warning(disable:4996) # ...

  6. poj 3126 BFS

    BFS得到的一定是最短路径.开始我还在纠结怎么才是最短的呢.其实BFS的题目有个共性(这不废话,哪一类题没有共性啊.呵呵).以后做这种题自己慢慢总结吧. 这题的思路就是写枚举出4位数的所有prime ...

  7. Borg Maze POJ - 3026 (BFS + 最小生成树)

    题意: 求把S和所有的A连贯起来所用的线的最短长度... 这道题..不看discuss我能wa一辈子... 输入有坑... 然后,,,也没什么了...还有注意 一次bfs是可以求当前点到所有点最短距离 ...

  8. POJ 2457 BFS

    题意: 说人话: 从A到B连边 找从1到k的最短路 并输出路径(随便一条即可 ) 如果不能到达 输出-1 思路: 搜 //By SiriusRen #include <queue> #in ...

  9. Dungeon Master POJ - 2251 BFS

    一.内容 题意:给定一个3D的图,你能走6个方向,问从起点到终点最少的步数. 二.思路 bfs搜索一下. 三.代码 #include <cstdio> #include <cstri ...

最新文章

  1. java中 set,list,array(集合与数组)相互转换
  2. 魔幻的“净醛产品”:宜家被罚“亡羊”,欧派用视频“补牢”?
  3. P1313 计算系数(组合数)
  4. eclipse打开出错 Error: opening registry key 'Software\JavaSoft\Java Runtime Environment'
  5. java 集合迭代器_Java中的集合迭代器
  6. http://blog.csdn.net/evankaka/article/details/45155047
  7. Julia语言初体验
  8. React Native 入门第一篇
  9. Java 中的线程管理概念梳理
  10. Linux c 多线程写日志,linux c/c++多线程程序的编写(转)
  11. mysql让数据-1_mysql数据库基本操作1
  12. TensorFlow进阶:车牌号识别项目
  13. Linux定时任务-Cron表达式详解
  14. Python书单推荐
  15. 在线供应链系统服务方案:构建企业供应链平台业务、功能、技术管理架构
  16. electron 双击放大事件
  17. 3w最简单led灯电路图_怎么选择自己合适的LED驱动IC?(十大LED驱动IC典型应用电路图)...
  18. 需要很多邮箱怎么办?分享几个不错的办法可无限安全生成多个邮箱
  19. 大数据框架基础Hive安装
  20. Linux/macOS 命令符列表

热门文章

  1. oracle oui25031 linux,搭建Oracle 10g RAC过程中出现 OUI-25031 的解决办法
  2. HR8P506,时钟配置,一切从内部时钟HRC开始.
  3. shell模板变量替换
  4. 一步步学习电子维修 二极管挡维修法
  5. 外贸中英繁三语企业网站管理系统 v2020.6.23
  6. 网络策划方案怎么写?分享一个品牌策划方案撰写方法
  7. 可视化神器Plotly玩转股票图
  8. 个人收集的网站,可以参考(程序员可收藏)
  9. iOS开发好不好学?
  10. nikebot NIKE AKAMAI BOT NIKE监控 nike补货监控 nike抽签 snrks