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. phpmyadmin导入大量数据比较快的做法

    在一次项目在其他机器上配置的时候,将数据库以.sql的形式导出后,在新的机器上想将数据重新导入phpmyadmin的时候.按照以前的在数据库中将所有数据复制过来然后点击sql运行给卡住了(数据量过大) ...

  2. hdu1824-Let's go home:图论2-SAT

    关键在于找出一定矛盾的条件,设一队的3个人为(a,b,c),a为队长,那么(a不留下,b不留下)矛盾,(a不留下,c不留下)矛盾; 对于每一对队员,(a留下,b留下)矛盾. 把模型建好,剩下的就是套模 ...

  3. paip.索引优化---sql distict—order by 法

    paip.索引优化---sql distict—order by 法 作者Attilax ,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...

  4. python学习Processing

    # -*- coding: utf-8 -*-__author__ = 'Administrator'import bisect#排序说明:http://en.wikipedia.org/wiki/i ...

  5. tab切换jquery代码

    http://immmmm.com/jquery-tab-switch-code-improved.html html <div id="sidebar-tab">   ...

  6. 【转】Devexpress使用之:GridControl控件(合并表头)

    Devexpress系列控件功能很强大,使用起来也不太容易,我也是边摸索边使用,如果有时间我会把常用控件的使用方法整理出来的. using System; using System.Collectio ...

  7. 2014牡丹江——Domination

    题目链接 题意: 给一个n*m的矩阵,每天随机的在未放棋子的格子上放一个棋子.求每行至少有一个棋子,每列至少有一个棋子的天数的期望  (1 <= N, M <= 50). 分析: 比較明显 ...

  8. WebApi2官网学习记录---Tracing

    安装追踪用的包 Install-Package Microsoft.AspNet.WebApi.Tracing Update-Package Microsoft.AspNet.WebApi.WebHo ...

  9. Javascript实现表格行排序

    网站开发中凡是用到表格来展示数据的,往往都要根据某个列来对行排序,下面是我从书上看到的一个行排序例子,看过后受益匪浅,故分享出来. 直接献上完整代码: <!doctype html> &l ...

  10. 13 java 设计模式--单例模式

    /** * 单例 */ public class JobSchedulerService { //防止类外部通过new实例化该类 private JobSchedulerService() { } / ...