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

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 163  Solved: 114
[Submit][Status][Discuss]

Description

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

Input

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

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

Output

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

Sample Input

Sample Output

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

带输出路径的BFS,可以将每个坐标当成一个点,然后两个相邻的'+'连一条边

#include<stdio.h>
#include<vector>
#include<queue>
#include<string.h>
using namespace std;
vector<int> G[6600];
queue<int> q;
char str[66][88];
int n, m, bet[6600];
void Print(int x)
{int sum = 0;while(x-2*m>=0 && bet[x-2*m]==bet[x]-1 && str[(x+m-1)/m-1][x-(x-1)/m*m]!='.')sum++, x -= 2*m;if(sum!=0){Print(x);printf("S %d\n", sum);return;}while(x+2*m<=n*m && bet[x+2*m]==bet[x]-1 && str[(x+m-1)/m+1][x-(x-1)/m*m]!='.')sum++, x += 2*m;if(sum!=0){Print(x);printf("N %d\n", sum);return;}while(x-2>=(x-1)/m*m && bet[x-2]==bet[x]-1 && str[(x+m-1)/m][x-(x-1)/m*m-1]!='.')sum++, x -= 2;if(sum!=0){Print(x);printf("E %d\n", sum);return;}while(x+2<=(x+m-1)/m*m && bet[x+2]==bet[x]-1 && str[(x+m-1)/m][x-(x-1)/m*m+1]!='.')sum++, x += 2;if(sum!=0){Print(x);printf("W %d\n", sum);return;}
}
int main(void)
{int i, j, S, T, x, y;scanf("%d%d", &n, &m);n = n*2-1, m = m*2-1;for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf(" %c", &str[i][j]);if(str[i][j]=='S')S = (i-1)*m+j,  str[i][j] = '+';if(str[i][j]=='E')T = (i-1)*m+j,  str[i][j] = '+';}}for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(str[i][j]=='+'){if(str[i+1][j]!='.' && str[i+2][j]=='+')G[(i-1)*m+j].push_back((i+1)*m+j);if(i-2>=0 && str[i-1][j]!='.' && str[i-2][j]=='+')G[(i-1)*m+j].push_back((i-3)*m+j);if(str[i][j+1]!='.' && str[i][j+2]=='+')G[(i-1)*m+j].push_back((i-1)*m+j+2);if(j-2>=0 && str[i][j-1]!='.' && str[i][j-2]=='+')G[(i-1)*m+j].push_back((i-1)*m+j-2);}}}memset(bet, 62, sizeof(bet));bet[S] = 0;q.push(S);while(q.empty()==0){x = q.front();q.pop();for(i=0;i<G[x].size();i++){y = G[x][i];if(bet[x]+1<bet[y]){bet[y] = bet[x]+1;q.push(y);}}}Print(T);return 0;
}
/*
3 6
+-+-+.+-+-+
|...|.....|
+-+-E-+-+-+
..|.....|.|
S-+-+-+.+-+
2 2
S-+
|.|
E-+
*/

bzoj 1687: [Usaco2005 Open]Navigating the City 城市交通(BFS)相关推荐

  1. BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )

    一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...

  2. [BZOJ] 1688: [Usaco2005 Open]Disease Manangement 疾病管理

    1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 727  S ...

  3. BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理

    题目 1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec  Memory Limit: 64 MB Description ...

  4. BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )

    最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...

  5. bzoj 3392: [Usaco2005 Feb]Part Acquisition 交易(最短路)

    3392: [Usaco2005 Feb]Part Acquisition 交易 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 191  Solved ...

  6. bzoj 1676: [Usaco2005 Feb]Feed Accounting 饲料计算(差分)

    1676: [Usaco2005 Feb]Feed Accounting 饲料计算 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 252  Solved ...

  7. bzoj 1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区(暴力)

    1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: ...

  8. bzoj 1685: [Usaco2005 Oct]Allowance 津贴(贪心)

    1685: [Usaco2005 Oct]Allowance 津贴 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 264  Solved: 195 [S ...

  9. bzoj 1681: [Usaco2005 Mar]Checking an Alibi 不在场的证明(BFS)

    1681: [Usaco2005 Mar]Checking an Alibi 不在场的证明 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 389  So ...

最新文章

  1. 蚂蚁金服核心技术:百亿特征实时推荐算法揭秘
  2. [转]Asp.net 将js文件打包进dll 方法
  3. PHP中abstract 和 interface的区别
  4. 简单说明PHP的垃圾收集机制是怎样的?
  5. 列出Sell in application所有可以传输的application object
  6. LeetCode —— 146. LRU缓存机制(Python)
  7. 计算1!+2!+...+n!
  8. android 纯c/c++开发(转)
  9. java 执行ssis包_在SSIS包中使用CHECKPOINT重新启动包执行
  10. Java 读写txt文件 中文乱码问题
  11. 接口文档模板,接口规范
  12. uniapp手机定位或者uniapp结合原生安卓定位
  13. 数学期望一-指数分布的数学期望
  14. WIN10安装VMware的管理员权限问题
  15. 专业学习经验交流会成功举行
  16. PCB板不同材质区别
  17. UNITY 模拟手机滑屏功能
  18. 电信大数据治理与质量管理
  19. 乒乓球重拍轻拍怎么选
  20. 小米max3支持html吗,小米Max3这款手机是否有OTG功能,支持OTG鼠标和U盘吗?

热门文章

  1. 简单python脚本实例-简单了解python调用其他脚本方法实例
  2. python所有软件-如何在Python中列出所有已安装的软件包及其版本?
  3. 科大讯飞独家Founding赞助国际语音顶会,14篇论文被收录
  4. python中类型转换的规则_Python 类型转换指南
  5. jQuery实现tab栏转换
  6. vue + wangeditor封装富文本组件
  7. 【java笔记】线程(3):Thread类的常用方法
  8. 蓝桥杯枚举+判断结果填空:猜年龄/奇妙数字
  9. 算法笔记:二叉树的序列化和反序列化(剑指 Offer 37)
  10. LAV Filter 源代码分析 1: 总体结构