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 ...
随机推荐
- [luoguP1489] 猫狗大战(DP)
传送门 类似背包的做法. f[i][j]表示是否能放i个物品,价格为j #include <cstdio> #include <iostream> #define N 8001 ...
- DBA的40条军规
DBA操作规范 1.涉及业务上的修改/删除数据,在得到业务方.CTO的邮件批准后方可执行,执行前提前做好备份,必要时可逆. 2.所有上线需求必须走工单系统,口头通知视为无效. 3.在对大表做表结构变更 ...
- org.springframework.amqp.AmqpIOException: java.net.UnknownHostException: guest解决
org.springframework.amqp.AmqpIOException: java.net.UnknownHostException: guest 由于在yml文件中配置的时候误将passw ...
- 更新数据库中数据时出现: Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences 问题
使用workbench在数据库中更新数据时报错: You are using safe update mode and you tried to update a table without a WH ...
- 1、Java并发性和多线程-并发性和多线程介绍
以下内容转自http://ifeve.com/java-concurrency-thread/: 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行 ...
- 玩转iOS开发 - 消息推送
消息推送
- 【C语言】推断一个数是否为2的n次方
//推断一个数是否为2的n次方 #include <stdio.h> int is_two_n(int num) { if ((num&(num - 1))) //去掉一个1,推断 ...
- 8.跟我学solr---UpdateRequestProcessor具体解释
简单介绍 java web开发的同学应该非常熟悉,在开发中常常会使用filter来处理请求中的一些切面需求. solr也提供类似的一种链式结构的handler来满足在加入数据索引请求的时候.通过切片的 ...
- 使用 Code Map 理解复杂代码1 ——Visual Studio2012
第一次知道code map是在Visual Studio Ultimate 2012自带的解说上面,当时认为十分好奇,所以查了查.结果一查就是好几天.原来Visual Studio Ultimate ...
- iOS开发——高级篇——iOS中为什么block用copy属性
1. Block的声明和线程安全Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC ...