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. HashMap Collision Resolution

    Separate Chaining Use data structure (such as linked list) to store multiple items that hash to the ...

  2. Spring初学(一)

    Spring核心机制:依赖注入 依赖注入简单的理解就是 由Spring负责对model进行设置,而非由controller直接设置. 通过依赖注入,javaEE各种组件可以解耦. 依赖注入(Depen ...

  3. poj 2251 Dungeon Master(bfs)

    Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...

  4. mysql学习之五:sql语句学习3

    好吧,大家认为这样的字体还是比較好看,全部我们就换这样的字体了. INSERT INTO 语句用于向表格中插入新的行. 语法 INSERT INTO 表名称 VALUES (值1, 值2,....) ...

  5. Codeforces 468B Two Sets 并查集

    题目大意:给出n个数,要求将n个数分配到两个集合中,集合0中的元素x,要求A-x也再0中,同理1集合. 写了几个版本号,一直WA在第8组数据...最后參考下ans,写了并查集过了 学到:1.注意离散的 ...

  6. java基础之集合

    集合的定义,集合的应用,集合的分类,集合的遍历,集合的特性

  7. 配置错误--分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。

    在部署网站的时候,很容易遇到这个一样错误:分析器错误消息: 无法识别的属性“targetFramework”.请注意属性名称区分大小写.  错误如图: 错误原因: 部署网站时,使用的应用程序池版本不对 ...

  8. Paros抓包工具

    http://www.hackbase.com/article-1593-1.html http://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1& ...

  9. NSArray使用小结

    http://blog.csdn.net/ms2146/article/details/8654263

  10. OC基础 可变字典与不可变字典的使用

    OC基础 可变字典与不可变字典的使用 1.不可变字典 1.1创建不可变字典 //创建字典 //注意: //1,元素个数是偶数 //2,每两个元素是一个键值对 //3,值在前,键在后 NSDiction ...