先预处理出每个点能到的需要建荷花的地方,把中间走的步数省略了,这样再最短路到终点就是最少需要建的荷花数。

至于方案数,只要把上一个点的方案数加起来就好了。

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
ll dir[8][2]={2,1,1,2,2,-1,-1,2,-2,1,1,-2,-1,-2,-2,-1
};
ll m,n;
ll map[50][50];
ll sx,sy,tx,ty;
int d[50][50][50][50];
bool inside(ll x,ll y)
{if(x>=1&&x<=m&&y>=1&&y<=n)return 1;return 0;
}
bool met[50][50];
void bfs1(ll x,ll y)
{memset(met,0,sizeof(met));queue<int>X;queue<int>Y;X.push(x);Y.push(y);met[x][y]=1;while(!X.empty()){ll ux=X.front();ll uy=Y.front();X.pop();Y.pop();for(ll i=0;i<8;i++){ll xx=ux+dir[i][0];ll yy=uy+dir[i][1];if(inside(xx,yy)){if(met[xx][yy]==0){met[xx][yy]=1;if(map[xx][yy]==1){X.push(xx);Y.push(yy);}else{d[x][y][xx][yy]=1;}}}}}
}
ll ans[50][50];
ll dis[50][50];
ll len[50][50];
void bfs2()
{memset(ans,0,sizeof(ans));memset(dis,0x3f,sizeof(dis));queue<int>X;queue<int>Y;X.push(sx);Y.push(sy);ans[sx][sy]=1;dis[sx][sy]=0;len[sx][sy]=0;while(!X.empty()){ll ux=X.front();ll uy=Y.front();X.pop();Y.pop();if(map[ux][uy]==2)continue;for(ll i=1;i<=m;i++){for(ll j=1;j<=n;j++){if(d[ux][uy][i][j]){if(dis[i][j]==dis[ux][uy]+1){ans[i][j]+=ans[ux][uy];}else if(dis[i][j]>dis[ux][uy]+1){dis[i][j]=dis[ux][uy]+1;ans[i][j]=ans[ux][uy];X.push(i);Y.push(j);}}}}}
}
int main()
{while(scanf("%lld %lld",&m,&n)!=EOF){for(ll i=1;i<=m;i++){for(ll j=1;j<=n;j++){scanf("%lld",&map[i][j]);if(map[i][j]==3){sx=i;sy=j;}if(map[i][j]==4){tx=i;ty=j;}}}memset(d,0,sizeof(d));for(ll i=1;i<=m;i++){for(ll j=1;j<=n;j++){bfs1(i,j);//预处理}}bfs2();if(dis[tx][ty]>25000){printf("-1\n");}else{printf("%lld\n%lld\n",dis[tx][ty]-1,ans[tx][ty]);}}return 0;
}

usacoSilver Lilypad Pond, 2007 Feb

和这道题相似,但不能省略中间步数。https://www.byvoid.com/blog/usaco-feb07-silver-silver-lilypad-pond/说的很好。

poj3271Lilypad Pondg相关推荐

  1. Lilypad Pondg(POJ-3171)

    Problem Description FJ has installed a beautiful pond for his cows' aesthetic enjoyment and exercise ...

  2. 图论 —— 图的搜索

    [概述] 图的搜索问题,是给出一个抽象的字符矩阵代表一张图,根据根据题目要求,对图进行搜索,关于搜索算法:点击这里 根据搜索方法的不同,分为深度优先遍历(DFS).广度优先遍历(BFS),两者时间复杂 ...

最新文章

  1. jquery combobox
  2. 短信验证码、图形验证码、邮件验证的自动化测试
  3. 页面饼图不显示_教你烙饼的懒人做法,不沾手不揉面,比蛋糕还香,凉了更好吃...
  4. Android开发笔记(一百一十三)测试工具
  5. 【重识 HTML + CSS】CSS 伪类、伪元素
  6. bar图设置距离 python_Python可视化分析:学会Matplotlib这几点就够了
  7. JAVA-SE基础篇-位运算
  8. 几种短距离无线通信技术及未来展望
  9. 独家发布全能在线语言翻译工具QTranslate v6.8.0 汉化中文版
  10. 计算机操作入门基础知识,电脑入门基本操作知识
  11. MTG1000中继网关用户手册
  12. NVIDIA Canvas 初体验~
  13. Docker安装mysql 报错 InnoDB: Table flags are 0 in the data dictionary but the flags in file
  14. 6、T5L DGUS ll 应用开发指南摘录(一)
  15. 问题记录之——windows10系统蓝牙失灵
  16. ubuntu安装wine时停在了“configuring ttf-mscorefonts-installer”怎么办
  17. Python爬虫:抓取多级页面数据
  18. 西电计算机初试复试占比,西安电子科技大学考研初试、考研复试成绩占比
  19. 聚苯乙烯/聚4-乙烯基吡啶功能微球/CF3-PPFPA-PS聚苯胺/聚苯乙烯微球的制备
  20. 使用Spring Task实现定时任务

热门文章

  1. 550分左右的理科大学计算机,理科考550分左右可以报考哪些大学2021
  2. apk提取加密素材_开机动画素材自动动手丰衣足食
  3. 宝宝开火车~ 升级了--学习,益智,火车,儿童,iphone手机游戏
  4. Failed to open file ''****.sql'', error: 2的解决方案
  5. 中国海洋大学-信息系统开发(Java)复习
  6. win10桌面图标无法删除?
  7. LeetCode第76题:最小覆盖子串(困难)
  8. 深度残差网络(ResNet)之ResNet34的实现和个人浅见
  9. 基于Umi搭建的个人Dva脚手架(五) - 可配置的搜索、弹窗组件封装
  10. 「不良视频」如何消灭?她手把手教你走出第一步!