bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课【spfa】
洛谷的数据毒啊
把(i,j,k)作为一个点spfa,表示点(i,j)朝向k方向,然后向四个方向转移即可
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=105,inf=1e9,dx[]={-1,1,0,0},dy[]={0,0,-1,1};
int n,sx,sy,tx,ty,dis[N][N][5];
char a[N][N];
bool v[N][N][5];
struct qwe
{
int x,y,k;
qwe(int X=0,int Y=0,int K=0)
{
x=X,y=Y,k=K;
}
};
inline bool ok(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=n&&a[x][y]!='x';
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%s",a[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(a[i][j]=='A')
sx=i,sy=j;
if(a[i][j]=='B')
tx=i,ty=j;
for(int k=0;k<4;k++)
dis[i][j][k]=inf;
}//cerr<<sx<<" "<<sy<<" "<<tx<<" "<<ty<<endl;
queue<qwe>q;
v[sx][sy][0]=1,v[sx][sy][1]=1,v[sx][sy][2]=1,v[sx][sy][3]=1;
dis[sx][sy][0]=0,dis[sx][sy][1]=0,dis[sx][sy][2]=0,dis[sx][sy][3]=0;
q.push(qwe(sx,sy,0)),q.push(qwe(sx,sy,1)),q.push(qwe(sx,sy,2)),q.push(qwe(sx,sy,3));
while(!q.empty())
{
int x=q.front().x,y=q.front().y,k=q.front().k;
q.pop();
v[x][y][k]=0;
for(int i=0;i<4;i++)
if(ok(x+dx[i],y+dy[i])&&dis[x+dx[i]][y+dy[i]][i]>dis[x][y][k]+(k!=i))
{
dis[x+dx[i]][y+dy[i]][i]=dis[x][y][k]+(k!=i);
if(!v[x+dx[i]][y+dy[i]][i])
{
v[x+dx[i]][y+dy[i]][i]=1;
q.push(qwe(x+dx[i],y+dy[i],i));
}
}
}
// for(int i=1;i<=n;i++)
// for(int j=1;j<=n;j++)
// for(int k=0;k<4;k++)
// cerr<<i<<" "<<j<<" "<<k<<" "<<dis[i][j][k]<<endl;
printf("%d\n",min(min(dis[tx][ty][0],dis[tx][ty][1]),min(dis[tx][ty][2],dis[tx][ty][3])));
return 0;
}
/*
3
.xA
...
Bx.
*/
bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课【spfa】的更多相关文章
- BZOJ 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课( BFS )
BFS... 我连水题都不会写了QAQ ------------------------------------------------------------------------- #inclu ...
- BZOJ 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
题目 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课 Time Limit: 5 Sec Memory Limit: 64 MB Description 考虑一 ...
- 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
1644: [Usaco2007 Oct]Obstacle Course 障碍训练课 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 383 Solved ...
- 【BZOJ】1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(bfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1644 这和原来一题用dp来做的bfs很像啊orz.. 我们设f[i][j][k]代表i,j这个点之前 ...
- bzoj1644 [Usaco2007 Oct]Obstacle Course 障碍训练课
Description 考虑一个 N x N (1 <= N <= 100)的有1个个方格组成的正方形牧场.有些方格是奶牛们不能踏上的,它们被标记为了'x'.例如下图: . . B x . ...
- BZOJ 1708: [Usaco2007 Oct]Money奶牛的硬币( dp )
背包dp.. -------------------------------------------------------------------------------- #include< ...
- BZOJ 1708: [Usaco2007 Oct]Money奶牛的硬币
1708: [Usaco2007 Oct]Money奶牛的硬币 Description 在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统 ...
- BZOJ 1709: [Usaco2007 Oct]Super Paintball超级弹珠
Description 奶牛们最近从著名的奶牛玩具制造商Tycow那里,买了一套仿真版彩弹游戏设备(类乎于真人版CS). Bessie把她们玩游戏草坪划成了N * N(1 <= N<= 1 ...
- bzoj 1709: [Usaco2007 Oct]Super Paintball超级弹珠【枚举】
k是1e5范围的,吗? 注意到n只有100,这意味着k去重之后之后n^2,也就是1e4! 然后就可以愉快的n^4枚举了,枚举每个格子,再枚举每个敌人,如果当前格子射不到敌人则退出,否则满足所有敌人则a ...
随机推荐
- 圆角计算 Shader
圆角的计算 在Shader中,我们使用UV坐标来计算需要显示的部分和不需要显示的部分,使用透明来处理显示与不显示.UV坐标如下图1,我们将坐标平移到图2位置,面片的UV坐标原点在面片中心,UV坐标范围 ...
- Web框架django基础篇
基本配置及学习 路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...
- nyoj 96 n-1位数(处理前导 0 的情况)(string)
n-1位数 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则 ...
- POJ 1330 (LCA)
http://poj.org/problem?id=1330 题意:给出一个图,求两个点的最近公共祖先. sl :水题,贴个模板试试代码.本来是再敲HDU4757的中间发现要用LCA, 操蛋只好用这 ...
- PatentTips – EMC Virtual File System
BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention generally relates to net ...
- 静态区间第k大(划分树)
POJ 2104为例[经典划分树问题] 思想: 利用快速排序思想, 建树时将区间内的值与区间中值相比,小于则放入左子树,大于则放入右子树,如果相等则放入左子树直到放满区间一半. 查询时,在建树过程中利 ...
- [bzoj1874][BeiJing2009 WinterCamp]取石子游戏_博弈论
取石子游戏 bzoj-1874 BeiJing2009 WinterCamp 题目大意:题目链接. 注释:略. 想法: 我们通过$SG$函数的定义来更新$SG$的转移. 如果是寻求第一步的话我们只需要 ...
- Java电商项目-6.实现门户首页数据展示_Redis数据缓存
目录 项目的Github地址 需求介绍 搭建Redis集群环境 下面先描述单机版redis的安装 下面将进行Redis3主3从集群环境搭建 基于SOA架构, 创建门户ashop-portal-web门 ...
- 我的arcgis培训照片4 来自http://www.cioiot.com/successview-549-1.html
- Python学习系列之装饰器
装饰器的作用 装饰器用于装饰某个函数.方法或者类,它可以让这个函数执行之前或者执行之后做一些操作 手工实现一个装饰器 def outer(some_func): #装饰器 $1 def inner() ...