bzoj 1687: [Usaco2005 Open]Navigating the City 城市交通(BFS)
1687: [Usaco2005 Open]Navigating the City 城市交通
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 163 Solved: 114
[Submit][Status][Discuss]
Description
Input
第1行:两个用空格隔开的整数N和E.
第2到2N行:每行有2E-I个字符,表示地图.
Output
每行有一个表示方向的字母和一个表示要开几个十字路口的数字表示.
Sample Input
Sample Output
带输出路径的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)相关推荐
- BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )
一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...
- [BZOJ] 1688: [Usaco2005 Open]Disease Manangement 疾病管理
1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 727 S ...
- BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理
题目 1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec Memory Limit: 64 MB Description ...
- BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )
最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...
- bzoj 3392: [Usaco2005 Feb]Part Acquisition 交易(最短路)
3392: [Usaco2005 Feb]Part Acquisition 交易 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 191 Solved ...
- bzoj 1676: [Usaco2005 Feb]Feed Accounting 饲料计算(差分)
1676: [Usaco2005 Feb]Feed Accounting 饲料计算 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 252 Solved ...
- bzoj 1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区(暴力)
1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区 Time Limit: 5 Sec Memory Limit: 64 MB Submit: ...
- bzoj 1685: [Usaco2005 Oct]Allowance 津贴(贪心)
1685: [Usaco2005 Oct]Allowance 津贴 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 264 Solved: 195 [S ...
- 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 ...
最新文章
- 蚂蚁金服核心技术:百亿特征实时推荐算法揭秘
- [转]Asp.net 将js文件打包进dll 方法
- PHP中abstract 和 interface的区别
- 简单说明PHP的垃圾收集机制是怎样的?
- 列出Sell in application所有可以传输的application object
- LeetCode —— 146. LRU缓存机制(Python)
- 计算1!+2!+...+n!
- android 纯c/c++开发(转)
- java 执行ssis包_在SSIS包中使用CHECKPOINT重新启动包执行
- Java 读写txt文件 中文乱码问题
- 接口文档模板,接口规范
- uniapp手机定位或者uniapp结合原生安卓定位
- 数学期望一-指数分布的数学期望
- WIN10安装VMware的管理员权限问题
- 专业学习经验交流会成功举行
- PCB板不同材质区别
- UNITY 模拟手机滑屏功能
- 电信大数据治理与质量管理
- 乒乓球重拍轻拍怎么选
- 小米max3支持html吗,小米Max3这款手机是否有OTG功能,支持OTG鼠标和U盘吗?