直接bfs,在过程中更新方案数即可

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=55,inf=1e9,dx[]={1,1,-1,-1,2,2,-2,-2},dy[]={2,-2,2,-2,1,-1,1,-1};
int n,m,a[N][N],b[N][N],dis[N][N];
long long f[N][N];
bool v[N][N];
struct qwe
{
int x,y;
qwe(int X=0,int Y=0)
{
x=X,y=Y;
}
}s,t;
queue<qwe>q;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
b[i][j]=dis[i][j]=inf;
if(a[i][j]==3)
s=qwe(i,j);
if(a[i][j]==4)
t=qwe(i,j);
}
q.push(s);
v[s.x][s.y]=1;
b[s.x][s.y]=dis[s.x][s.y]=0;
f[s.x][s.y]=1;
while(!q.empty())
{
qwe u=q.front();
q.pop();
v[u.x][u.y]=0;
for(int k=0;k<8;k++)
{
int x=u.x+dx[k],y=u.y+dy[k];
if(x<1||y<1||x>n||y>m||a[x][y]==2)
continue;
int nw=b[u.x][u.y]+(a[x][y]==0);
if(nw<b[x][y])
{
b[x][y]=nw;
dis[x][y]=dis[u.x][u.y]+1;
f[x][y]=f[u.x][u.y];
if(!v[x][y])
{
v[x][y]=1;
q.push(qwe(x,y));
}
}
else if(nw==b[x][y])
{
if(dis[u.x][u.y]+1<dis[x][y])
{
dis[x][y]=dis[u.x][u.y]+1;
f[x][y]=f[u.x][u.y];
if(!v[x][y])
{
v[x][y]=1;
q.push(qwe(x,y));
}
}
else if(dis[u.x][u.y]+1==dis[x][y])
{
f[x][y]+=f[u.x][u.y];
if(!v[x][y])
{
v[x][y]=1;
q.push(qwe(x,y));
}
}
}
}
}
if(b[t.x][t.y]==inf)
puts("-1");
else
printf("%d\n%d\n%lld\n",b[t.x][t.y],dis[t.x][t.y],f[t.x][t.y]);
return 0;
}

bzoj 1632: [Usaco2007 Feb]Lilypad Pond【bfs】的更多相关文章

  1. BZOJ 1632: [Usaco2007 Feb]Lilypad Pond

    题目 1632: [Usaco2007 Feb]Lilypad Pond Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 390  Solved: 109[ ...

  2. 【BZOJ】1632: [Usaco2007 Feb]Lilypad Pond(bfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1632 我简直是个sb... ... bfs都不会写.. 算方案还用2个bfs! 都不会整合到一个! ...

  3. BZOJ 1632 [Usaco2007 Feb]Lilypad Pond:spfa【同时更新:经过边的数量最小】【路径数量】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1632 题意: 有一个n*m的池塘.0代表水,1代表荷花,2代表岩石,3代表起点,4代表终点 ...

  4. 1632: [Usaco2007 Feb]Lilypad Pond

    1632: [Usaco2007 Feb]Lilypad Pond Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 404  Solved: 118[Sub ...

  5. bzoj 1631: [Usaco2007 Feb]Cow Party【spfa】

    正反加边分别跑spfa最短路,把两次最短路的和求个max就是答案 #include<iostream> #include<cstdio> #include<queue&g ...

  6. bzoj1632 [Usaco2007 Feb]Lilypad Pond

    Description Farmer John 建造了一个美丽的池塘,用于让他的牛们审美和锻炼.这个长方形的池子被分割成了 M 行和 N 列( 1 ≤ M ≤ 30 ; 1 ≤ N ≤ 30 ) 正方 ...

  7. BZOJ1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘

    一傻逼题调了两天.. n<=30 * m<=30的地图,0表示可以放平台,1表示本来有平台,2表示不能走,3起点4终点,走路方式为象棋的日字,求:从起点走到终点,至少要放多少平台,以及放平 ...

  8. BZOJ1632: [Usaco2007 Feb]Lilypad Pond SPFA+最短路计数

    Description 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M行N列个方格(1≤M,N≤30).一些格子是坚固得令人惊讶的莲花,还有一些格子是岩石,其余的只是 ...

  9. 洛谷 P1606 [USACO07FEB]荷叶塘Lilypad Pond【spfa】

    和bzoj同名题不一样! 起点和水点向花费一个荷花能到的第一个点连一条边权为1的有向边,然后跑计数spfa即可 #include<iostream> #include<cstdio& ...

随机推荐

  1. ESI 动态缓存技术[转载]

    任何一个Web网站的内容都是在不断更新和变化,但这并不意味这这个网站的内容就是动态内容,事实上,动态的内容是指用户每次点击 相同的链接时取的的内容是由Web服务器应用程序生成的,如常见得ASP,JSP ...

  2. php 之 日志系统seaslog安装

    php 之 日志系统seaslog 特点: 1.高性能(使用C语言编写的). 2.无需配置. 3.功能完善.使用简单. 安装: 打开php的扩展官网:https://pecl.php.net/. 然后 ...

  3. OC温习一:基本数据类型

    类型限定修饰词 除了上图中基本数据类型之外, 还有一些类型限定修饰词: short短型:修饰 int  double: long长型:修饰 int double: signed 有符号型:修饰int ...

  4. 寒武纪camp Day4

    补题进度:7/11 A(博弈论) 略 B 待填坑 C(贪心) 题意: 一个序列是good的当且仅当相邻两个数字不相同.给出一个长度为n的数列,每个数字是ai.定义一种操作就是把a中某个元素拿到首位去, ...

  5. java 基础 1 final关键字

    1. final关键字 数据:声明数据为常量,对于基本类型final使数值不变,对于引用类型final使引用不变,但引用所指向的值是可以改变的,例如       final StringBuffer ...

  6. Spring Data JPA 进阶

    Java持久化查询语言概述 Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起,使用这种语言编写的查询是可移植的,可以被编 ...

  7. 【.Net Core 学习系列】-- EF Core实践(DB First)

    一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二.准备数据: CREATE DATABASE [Blogging]; GO USE [Blogging ...

  8. Angular2.x-主/细节组件

    此刻,HeroesComponent显示heroes列表和所选heroes的详细信息. 随着应用程序的增长保持一个组件中的所有功能将不可维护.您需要将大型组件分成更小的子组件,每个组件都专注于特定的任 ...

  9. 算法导论—无向图的遍历(BFS+DFS,MATLAB)

    华电北风吹 天津大学认知计算与应用重点实验室 最后改动日期:2015/8/22 无向图的存储方式有邻接矩阵,邻接链表,稀疏矩阵等. 无向图主要包括双方面内容,图的遍历和寻找联通分量. 一.无向图的遍历 ...

  10. spinlock in linux kernel

    spinlock in linux kernel 作为一种锁机制, spinlock可以制造一段临界区, 同一时刻只有一个线程能进入这个临界区, 从而达到保护数据的目的. semaphore, mut ...