因为有了1的存在,使得问题变得比较难搞了,所以比较简单的做法就是把1去掉,先做一次bfs,处理出每个点能够一步到达的点(一定是1步).

然后就可以在新图上用bfs算出两个点之间的最短路,和最短路的个数。(至于原题问的为什么是这个,很简单,因为建造的香蒲要最少,所以不会重复建造,不会多建造,所以就是求最短路,至于路径数,因为现在路径长度是简单递增的,所以直接累加就可以了)。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=30+9;
int dist[maxn][maxn],a[maxn][maxn];
int n,m;
bool d[maxn][maxn][maxn][maxn];
int quex[maxn*maxn],quey[maxn*maxn];
long long ans[maxn][maxn];
bool text[maxn][maxn];
void bfs2(int t,int s)
{int front=1,end=0;quex[++end]=t;quey[end]=s;memset(dist,50,sizeof(dist));memset(ans,0,sizeof(ans));dist[t][s]=0;ans[t][s]=1;while(front<=end){int x=quex[front],y=quey[front++];if(a[x][y]==2) continue;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(d[x][y][i][j]){if(dist[i][j]==dist[x][y]+1)ans[i][j]+=ans[x][y];else if(dist[i][j]>dist[x][y]+1){dist[i][j]=dist[x][y]+1;ans[i][j]=ans[x][y];quex[++end]=i;quey[end]=j;}}}
}void bfs(int t,int s)
{memset(text,0,sizeof(text));int front=1,end=0;quex[++end]=t;quey[end]=s;text[t][s]=1;while(front<=end){int x=quex[front],y=quey[front++];for(int i=-1;i<=1;i+=2)for(int j=-1;j<=1;j+=2)for(int k=1;k<=2;k++){int tmp=1;if(k==1) tmp=2;int tox=x+i*k,toy=j*tmp+y;if(tox>=1&&tox<=n&&toy>=1&&toy<=m)if(!text[tox][toy]){text[tox][toy]=1;if(a[tox][toy]==1){quex[++end]=tox;quey[end]=toy;}else{d[t][s][tox][toy]=1;}}}}
}int main()
{while(scanf("%d %d",&n,&m)!=EOF){int t,s,tox,toy;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);if(a[i][j]==3){t=i;s=j;}else if(a[i][j]==4){tox=i;toy=j;}}memset(d,0,sizeof(d));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)bfs(i,j);bfs2(t,s);if(dist[tox][toy]>1e3){printf("-1\n");}else{printf("%d\n%lld\n",dist[tox][toy]-1,ans[tox][toy]);}}return 0;
}

poj 3271 Lilypad Pond bfs相关推荐

  1. poj 3271 LilyPad

    神坑.一上午全奉献给了他.哭. 还在还坑过了 神刚,大夫.心满意足. 题目大意:Bessie在一片池塘里面玩,FJ希望Bessie从标有3的格子跳到标有4的格子里面去.0表示水面,1表示极其结实的转基 ...

  2. poj3271 Lilypad Pond bfs

    处理出每个点一步能到的点再统计路径. #include <iostream> #include <cstring> #include <cstdio> #inclu ...

  3. bzoj 1632: [Usaco2007 Feb]Lilypad Pond(BFS)

    1632: [Usaco2007 Feb]Lilypad Pond Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 688  Solved: 230 [S ...

  4. bzoj 1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘(BFS)

    1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 550  Solved: 1 ...

  5. Problem : [usaco2007 Feb]Lilypad Pond

    Problem : [usaco2007 Feb]Lilypad Pond Description Farmer John 建造了一个美丽的池塘,用于让他的牛们审美和锻炼. 这个长方形的池子被分割成了 ...

  6. P1606 [USACO07FEB]荷叶塘Lilypad Pond(最短路计数)

    P1606 [USACO07FEB]荷叶塘Lilypad Pond 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enj ...

  7. POJ 3414 Pots【BFS】+ Python

    原题链接: 3414 -- Pots 参考资料:POJ 3414 - Pots | 眈眈探求 POJ 3414 Pots[BFS][图搜] - it610.com 一 特别注意: 1. 每一种操作对应 ...

  8. bzoj 1632: [Usaco2007 Feb]Lilypad Pond【bfs】

    直接bfs,在过程中更新方案数即可 #include<iostream> #include<cstdio> #include<queue> using namesp ...

  9. POJ 3271 BFS (大坑)

    被某人拉进了坑 完完全全被坑一天的题-- 题意: 正解思路: 先把每一个点搜一遍 预处理出它能在一步之内到的所有点 并连边 然后用一个类似DP的东西把方案数加起来就搞定了 (其实 也不是很难) 但是 ...

最新文章

  1. 第四代自动泊车从APA到AVP技术
  2. 个人前端学习路线图与github优秀前端开发者的路线图推荐
  3. [LeetCode] 67. Add Binary Java
  4. 【hihoCoder】1288 : Font Size
  5. 如何做相册_手机里的照片太多,不得已只能删除?那就试试制作电子相册吧
  6. c语言程序设计实验三程序,c语言程序设计实验三循环.doc
  7. oracle中sqldrunl结尾符号,oracle笔记(韩顺平oracle视频教学整理)
  8. python游戏dnf_招募:基于python的召唤师全时段全技能(含均值AI)计算器全程测试...
  9. GIS中的矢量数据、栅格数据
  10. 小米4 miui6 android,小米4 rom刷机包 4.10.11(MIUI6) 官方最新版
  11. 腾讯云域名购买和域名解析教程
  12. VB DoEvents 的使用
  13. 微信提现报证书已过期
  14. 微信支付宝多商户解决方案
  15. Python求风向xy向量
  16. 6 电脑键盘控制机器人
  17. 端口映射工具之80端口映射软件无公网IP时发布网站应用等应用
  18. data=*(vu32*)addr;的理解?
  19. bash grep 判断_bash 退出状态与条件判断
  20. Python 3 显示图像的方法

热门文章

  1. Ubuntu18.04配置无人驾驶赛车游戏TORCS(解决找不到GL/glut.h、AL/alut.h和libXmu,以及编译中出现‘isnan’was not declared等)
  2. C/C++游戏项目完整教程:《推箱子》
  3. Math-Model(一)数学建模算法综述
  4. 哈灵麻将位置服务器,哈灵麻将最新版
  5. ocacle 执行计划_Oracle执行计划详解
  6. odoo14 | name_search方法的使用和效果
  7. qt开发常用的论坛,博客
  8. SuperWeChatPC开源开放开发者SDK-打造你的超级微信
  9. 英特尔CEO帕特·基辛格:以独特优势抓住巨大的增长机遇
  10. 软件构造——可复用性