1687: [Usaco2005 Open]Navigating the City 城市交通

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 122  Solved: 85
[Submit][Status][Discuss]

Description

    由于牛奶市场的需求,奶牛必须前往城市,但是唯一可用的交通工具是出租车.教会奶牛如何在城市里打的.
    给出一个城市地图,东西街区E(1≤E≤40),南北街区N(1≤N≤30).制作一个开车指南给出租车司机,告诉他如何从起点(用S表示)到终点(用E表示).每一个条目用空格分成两部分,第一个部分是方向(N,E,S,W之一),第二个是一个整数,表示要沿着这个方向开几个十字路口.如果存在多条路线,你应该给出最短的.数据保证,最短的路径存在且唯一.    地图中“+”表示十字路口,道路用“I”和“一”表示.建筑和其他设施用“.”表示.下面是一张地图:

3 6

+-+-+.+-+-+

|...|.....|

+-+.+-+-+-+

..|.......|

S-+-+-+.E-+

 
    出租车可以沿着东,北,西,北,东开两个十字路口,以此类推.具体将由样例给出

3 6

+-+-+.+-+-+

|...|.....|

+-+.+-+-+-+

..|.......|

S-+-+-+.E-+

Input

第1行:两个用空格隔开的整数N和E.

第2到2N行:每行有2E-I个字符,表示地图.

Output

每行有一个表示方向的字母和一个表示要开几个十字路口的数字表示.

Sample Input

Sample Input

3 6

+-+-+.+-+-+

|...|.....|

+-+.+-+-+-+

..|.......|

S-+-+-+.E-+

Sample Output

E 1
N 1
W 1
N 1
E 2
S 1
E 3
S 1
W 1

HINT

 

Source

Silver

题解:

BFS+DFS

先用BFS遍历图,跑出所有的步数,再用DFS倒推找到合法路径。最后输出即可。

 #include<bits/stdc++.h>
using namespace std;
#define INF 1e9
int fx[]={-,,,};
int fy[]={,,-,};
int n,m,dis[][],pd,bx,by;
int qx[],qy[];
bool vv[][],vis[][];
char a[][];
void dfs(int x,int y,int bs)
{
int i,xx,yy;
vv[x][y]=true;
if(pd==)return;
if(x==bx&&y==by){pd=;return;}
for(i=;i<=;i++)
{
xx=x+fx[i];
yy=y+fy[i];
if(xx>=&&xx<=*n-&&yy>=&&yy<=*m-&&dis[xx][yy]==bs-)
{
dfs(xx,yy,bs-);
if(pd==)return;
}
}
}
void print(int k)
{
if(k==)printf("N");
if(k==)printf("S");
if(k==)printf("W");
if(k==)printf("E");
}
int main()
{
int i,j,xx,yy,ex,ey,jl,fx1,ux,uy,vx,vy,head,tail;
scanf("%d %d",&n,&m);
for(i=;i<=*n-;i++)scanf("\n%s",a[i]+);
bx=;by=;ex=;ey=;
for(i=;i<=*n-;i++)
{
for(j=;j<=*m-;j++)
{
if(a[i][j]=='S')bx=i,by=j;
if(a[i][j]=='E')ex=i,ey=j;
dis[i][j]=INF;
}
}
head=;tail=;
qx[tail]=bx;qy[tail]=by;dis[bx][by]=;
memset(vis,false,sizeof(vis));vis[bx][by]=true;
pd=;
while(head!=tail)
{
head++;if(head==)head=;
ux=qx[head];
uy=qy[head];
for(i=;i<=;i++)
{
vx=ux+fx[i];
vy=uy+fy[i];
if(vx>=&&vx<=*n-&&vy>=&&vy<=*m-&&vis[vx][vy]==false&&dis[vx][vy]>dis[ux][uy]+&&a[vx][vy]!='.')
{
vis[vx][vy]=true;
dis[vx][vy]=dis[ux][uy]+;
tail++;if(tail==)tail=;
qx[tail]=vx;
qy[tail]=vy;
if(vx==ex&&vy==ey){pd=;break;}
}
}
if(pd==)break;
vis[ux][uy]=false;
}
memset(vv,false,sizeof(vv));
pd=;
dfs(ex,ey,dis[ex][ey]);
fx1=-;//北0,南1,西2,东3.
jl=;
vv[bx][by]=false;
while()
{
if(bx==ex&&by==ey){if(jl!=){print(fx1);printf(" %d\n",(jl+)/);}break;}
for(i=;i<=;i++)
{
xx=bx+fx[i];
yy=by+fy[i];
if(vv[xx][yy]==true)break;
}
vv[xx][yy]=false;
bx=xx;
by=yy;
if(i==fx1)jl++;
else
{
if(fx1==-){fx1=i;jl=;}
else {print(fx1);printf(" %d\n",(jl+)/);fx1=i;jl=;}
}
}
return ;
}

Bzoj 1687: [Usaco2005 Open]Navigating the City 城市交通 广搜,深搜的更多相关文章

  1. 1687: [Usaco2005 Open]Navigating the City 城市交通

    1687: [Usaco2005 Open]Navigating the City 城市交通 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 94  Sol ...

  2. 【BZOJ】1687: [Usaco2005 Open]Navigating the City 城市交通(bfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1687 bfs后然后逆向找图即可.因为题目保证最短路唯一 #include <cstdio> ...

  3. bzoj:1687;poj 2434:[Usaco2005 Open]Navigating the City 城市交通

    Description A dip in the milk market has forced the cows to move to the city. The only employment av ...

  4. Bzoj 1674: [Usaco2005]Part Acquisition dijkstra,堆

    1674: [Usaco2005]Part Acquisition Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 337  Solved: 162[Sub ...

  5. [BZOJ 1733] [Usaco2005 feb] Secret Milking Machine 【二分 + 最大流】

    题目链接:BZOJ - 1733 题目分析 直接二分这个最大边的边权,然后用最大流判断是否可以有 T 的流量. 代码 #include <iostream> #include <cs ...

  6. BZOJ 1739: [Usaco2005 mar]Space Elevator 太空电梯

    题目 1739: [Usaco2005 mar]Space Elevator 太空电梯 Time Limit: 5 Sec  Memory Limit: 64 MB Description The c ...

  7. BZOJ 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚

    题目 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚 Time Limit: 5 Sec  Memory Limit: 64 MB Description Farm ...

  8. BZOJ 1677: [Usaco2005 Jan]Sumsets 求和( dp )

    完全背包.. --------------------------------------------------------------------------------------- #incl ...

  9. BZOJ 1679: [Usaco2005 Jan]Moo Volume 牛的呼声( )

    一开始直接 O( n² ) 暴力..结果就 A 了... USACO 数据是有多弱 = = 先sort , 然后自己再YY一下就能想出来...具体看code --------------------- ...

随机推荐

  1. SQL的经典操作——批量复制同行的其它列数据到其它列数据

    看图说话比较直观: 对比复制前后的数据表: 使用SQL语句:UPDATE OR ROLLBACK Content SET YINBIAO = YINBIAO2, GESHU = GESHU2 WHER ...

  2. HttpUtility.HtmlEncode

    HttpUtility.HtmlEncode用来防止站点受到恶意脚本注入的攻击 public string Welcome(string name, int numTimes = 1) {     r ...

  3. linux-信号。

    信号 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的. 信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到 ...

  4. Json 数组排序

    /*********************************************Json 数组排序 ******************************************** ...

  5. yii2单个视图加载jss,css

    1,定义资源:首先在AppAsset.php里面定义2个方法, //按需加载css public static function addCss($view, $cssfile) { $view-> ...

  6. 2、.net NVelocity中原生javascript ajax封装使用

    在页面上,我们经常会遇到局部刷新的例子,这个时候,就需要用到ajax, 因为很多代码都是公用的,所以我们想到了,将代码封装,简化了使用,减少了冗余 javascript ajax代码如下: var x ...

  7. backbone csdn

    http://blog.csdn.net/the_fire/article/details/7444067 blog.csdn.net/the_fire/article/details/7445448 ...

  8. 【 CodeForces - 392C】 Yet Another Number Sequence (二项式展开+矩阵加速)

    Yet Another Number Sequence Description Everyone knows what the Fibonacci sequence is. This sequence ...

  9. php拓展ssh功能

    1.下载拓展ssh需要的两个软件包,libssh2和ssh2. libssh2下载地址:http://pan.baidu.com/s/1hq7XOhu libssh2官网下载地址:http://www ...

  10. 忽然想到,为什么以前iOS的工资高

    听说做iOS的在上海工资也可以  前几年还行,现在也不太行了除非你水平很高 现在移动应用已经100多万了,基本饱和了以前是新的商业模式要抢时间,会的人也少