Description

Input

第1行输入w和H,之后W行H列输入地图,图上符号意义如题目描述.

Output

最少的对角镜数量.

Sample Input

7 8
.......
...... C
......*
*****.*
....*..
....*..
.C ..*..
.......

Sample Output

3
 
求拐点数最小
直接搜索是不行的,因为可能出现一个点当前被更新的状态并不是它最优的状态
所以像spfa那样允许多次入队,这样虽然慢一点但是没有后效性,而且这么小的数据也不会慢到哪里去吧
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#define LL long long
#define inf 598460606
#define pa pair<int,int>
#define pi 3.1415926535897932384626433832795028841971
using namespace std;
struct que{int x,y,dire,dist;}now,wrk;
bool operator < (const que &a,const que &b)
{return a.dist>b.dist;}
priority_queue <que> q;
const int mx[4]={0,1,0,-1};
const int my[4]={1,0,-1,0};
int n,m,sx,sy,ex,ey;
bool mrk[110][110];
int dist[110][110][4];
int main()
{
scanf("%d%d",&m,&n);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
char ch=getchar();
while (ch!='C'&&ch!='.'&&ch!='*')ch=getchar();
if (ch=='*')mrk[i][j]=1;
if (ch=='C'){if (!sx){sx=i;sy=j;}else {ex=i;ey=j;} }
}
memset(dist,127,sizeof(dist));
now.x=sx;now.y=sy;now.dist=0;
for (int i=0;i<4;i++)
{
now.dire=i;
q.push(now);
dist[sx][sy][i]=0;
}
while (!q.empty())
{
now=q.top();q.pop();
int k=now.dire;
wrk=now;
while (wrk.x+mx[k]>=1&&wrk.x+mx[k]<=n&&wrk.y+my[k]>=1&&wrk.y+my[k]<=m&&!mrk[wrk.x+mx[k]][wrk.y+my[k]]&&dist[wrk.x+mx[k]][wrk.y+my[k]][k]>wrk.dist)
{
wrk.x+=mx[k];wrk.y+=my[k];
dist[wrk.x][wrk.y][k]=dist[now.x][now.y][k];
q.push(wrk);
}
wrk=now;wrk.dist++;
for (int k=0;k<4;k++)
if(dist[now.x][now.y][k]>now.dist+1)
{
dist[now.x][now.y][k]=now.dist+1;
wrk.dire=k;
q.push(wrk);
}
}
int ans=inf;
for (int k=0;k<4;k++)
ans=min(ans,dist[ex][ey][k]);
printf("%d\n",ans);
}

  

bzoj3393 [Usaco2009 Jan]Laserphones 激光通讯的更多相关文章

  1. BZOJ3393 [Usaco2009 Jan]Laserphones 激光通讯 BFS

    原文链接http://www.cnblogs.com/zhouzhendong/p/8371735.html 题目传送门 - BZOJ3393 题意概括 直接看原题的翻译吧,很容易懂的. 题解 我不知 ...

  2. BZOJ3393:[USACO LPHONE] 激光通讯

    分层图+堆优化的dijkstra 将原图分为4层,分别是只向上,向下,向左,向右建立边,然后层与层之间的转移很好处理.稠密图,应该用堆优化的dijkstra. //OJ 1845 //by Cydia ...

  3. bzoj 1576: [Usaco2009 Jan]安全路经Travel 树链剖分

    1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 665  Solved: 227[Sub ...

  4. BZOJ3396: [Usaco2009 Jan]Total flow 水流

    3396: [Usaco2009 Jan]Total flow 水流 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 45  Solved: 27[Sub ...

  5. BZOJ3394: [Usaco2009 Jan]Best Spot 最佳牧场

    3394: [Usaco2009 Jan]Best Spot 最佳牧场 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 11  Solved: 9[Sub ...

  6. 1574: [Usaco2009 Jan]地震损坏Damage

    1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 425  Solved: 232[Subm ...

  7. 3396: [Usaco2009 Jan]Total flow 水流

    3396: [Usaco2009 Jan]Total flow 水流 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 179  Solved: 73[Su ...

  8. 【BZOJ1576】[Usaco2009 Jan]安全路经Travel 最短路+并查集

    [BZOJ1576][Usaco2009 Jan]安全路经Travel Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, ...

  9. 【思维题 并查集 图论】bzoj1576: [Usaco2009 Jan]安全路经Travel

    有趣的思考题 Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i Output * 第1..N-1行: 第 ...

随机推荐

  1. LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别

    LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下: LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径 ...

  2. Saruman's Army (POJ 3069)

    直线上有N个点.点i的位置是Xi.从这N个点中选择若干个,给它们加上标记.对每一个点,其距离为R以内的区域里必须又带有标记的点(自己本身带有标记的点,可以认为与其距离为0的地方有一个带有标记的点).在 ...

  3. poj 3258 River Hopscotch(二分搜索之最大化最小值)

    Description Every year the cows hold an ≤ L ≤ ,,,). Along the river between the starting and ending ...

  4. 并发情况下synchronized死锁

    存在缺陷的代码: public class DataPropertyIdAndNameRepositoryImpl{ /** 发布标志 */ private volatile boolean publ ...

  5. .net网站开发(一):1.input表单元素

    其实,在半年前我对网站开发还是完全不感冒的,不是没认识,而是只认识到表面.我以为网站模型就那几样,新闻.论坛.博客啥的,仿个站出来有什么意思?但现在我是知道了,大多应用开发还是采用B/S架构的,包括服 ...

  6. android面试题之七

    三十六.请解释下在单线程模型中Message.Handler.Message Queue.Looper之间的关系. 简单的说,Handler获取当前线程中的looper对象,looper用来从存放Me ...

  7. 畅通project

    原文请訪问:p=174">http://xiaoshig.sinaapp.com/?p=174 畅通project Time Limit:2000MS     Memory Limit ...

  8. RMAN连接及简单操作

    一.RMAN的进入与退出 1.启动RMAN并连接到本地目标数据库 C:\Users\Administrator>set oracle_sid=orcl(如果只有一个实例,则不需要指定,RMAN会 ...

  9. 服务器安装VMware ESXI5.5

    一.VMware ESXI5.5 vSphere5.5 VIMSetup下载http://blog.sina.com.cn/s/blog_61c07ac50101gy64.html(1)VMware安 ...

  10. oracle启动,提示“LRM-00109: could not open parameter file”

    转载自   http://blog.sina.com.cn/s/blog_53e731b70101liku.html oracle启动,提示“LRM-00109: could not open par ...