poj 3271 Lilypad Pond bfs
因为有了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的更多相关文章
- BZOJ 1632: [Usaco2007 Feb]Lilypad Pond
题目 1632: [Usaco2007 Feb]Lilypad Pond Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 390 Solved: 109[ ...
- 1632: [Usaco2007 Feb]Lilypad Pond
1632: [Usaco2007 Feb]Lilypad Pond Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 404 Solved: 118[Sub ...
- 洛谷 P1606 [USACO07FEB]荷叶塘Lilypad Pond 解题报告
P1606 [USACO07FEB]荷叶塘Lilypad Pond 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enj ...
- bzoj1698 / P1606 [USACO07FEB]白银莲花池Lilypad Pond
P1606 [USACO07FEB]白银莲花池Lilypad Pond 转化为最短路求解 放置莲花的方法如果直接算会有重复情况. 于是我们可以先预处理和已有莲花之间直接互相可达的点,将它们连边(对,忽 ...
- poj 3414 Pots 【BFS+记录路径 】
//yy:昨天看着这题突然有点懵,不知道怎么记录路径,然后交给房教了,,,然后默默去写另一个bfs,想清楚思路后花了半小时写了120+行的代码然后出现奇葩的CE,看完FAQ改了之后又WA了.然后第一次 ...
- 最短路【洛谷P1606】 [USACO07FEB]荷叶塘Lilypad Pond
P1606 [USACO07FEB]荷叶塘Lilypad Pond 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M行N列个方格(1≤M,N≤30).一些格子是坚固得令 ...
- P1606 [USACO07FEB]荷叶塘Lilypad Pond(最短路计数)
P1606 [USACO07FEB]荷叶塘Lilypad Pond 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enj ...
- 【BZOJ】1632: [Usaco2007 Feb]Lilypad Pond(bfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1632 我简直是个sb... ... bfs都不会写.. 算方案还用2个bfs! 都不会整合到一个! ...
- bzoj 1632: [Usaco2007 Feb]Lilypad Pond【bfs】
直接bfs,在过程中更新方案数即可 #include<iostream> #include<cstdio> #include<queue> using namesp ...
随机推荐
- 第十二章作业 MemoryBugs-master项目优化笔记
作业要求: 下载bug项目:https://github.com/lzyzsd/MemoryBugs,请注意配合使用MemoryMonitor, AllocationTracker以及HeapDump ...
- Python sys.path.append
python sys.path.append 对于模块和自己写的程序不在同一个目录下,可以把模块的路径通过sys.path.append(路径)添加到程序中. 在程序开头加上: import syss ...
- cocos2d-x 实现粒子飞行特效
效果图 说明 实现效果: 按下鼠标并且移动, 所到之处产生光圈 光圈会以窗口中心为终点, 并且会偏移自身角度对准终点, 然后持续飞行, 直到终点. 附件 下载源码, 请猛击这里!
- connect network is unreachable 解决办法
详细教程见:http://blog.csdn.net/liukun321/article/details/6662950 1.虚拟机中的centos系统要连接外网,我们需要使用桥接网络 2.正常配置e ...
- 解决css3遮罩层挡住下面元素事件的方法
比如大家常看到的鼠标移入图片中,会有一个挡住图片的黑色半透明遮罩层,上面还有文字介绍,这时候就会遇到该层遮挡住下面图片的跳转链接事件,这时候怎么办呢?有个简单的css3属性可以快速解决该问题:poin ...
- jQuery中$.get()、$.post()和$.ajax()
jQuery.get()方法: $.get(url,data,success(response,status,xhr),dataType) 该函数是简写的 Ajax 函数,等价于: $.ajax({ ...
- mongoDB之用户及权限设置
之前用MongoDB没有设置用户和权限,一直都是本机应用程序连接MongoDB.在服务器上部署后对外没有开数据库连接端口,本机应用程序连接再开放应用程序端口供外部访问. 我部署的环境是ubuntu 1 ...
- HTML&CSS基础学习笔记1.30-颜色的表达
颜色的表述 在网页中的颜色设置是非常重要,CSS的属性有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 ...
- 省队集训day6 B
一道AC自动机题···· 一定要把一个节点没有的儿子接到它fai的儿子,否则会卡到n^2的······· #include<cstdio> #include<iostream> ...
- Unity3d在安卓android的更新(APK覆盖)
其实这并没什么技术难点,也不是完美的热更新方案,只能说是退而求其次的一个方法. 起因主要是因为公司几个U3D项目在立项之初都没有能做好热更新的规化,导致现在要去做U3D的热更新非常难,并且项目已处于中 ...