codeforces 877D
来源:互联网 发布:淘宝我的空间怎么设置 编辑:程序博客网 时间:2024/05/29 03:43
题目链接:
http://codeforces.com/contest/877/problem/D
题解:
有段时间没怎么好好打代码了,简单的BFS打错了一个地方,找了半天。
代码:
#include <map>#include <cmath>#include <queue>#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define met(a,b) memset(a,b,sizeof(a))#define inf 0x3f3f3f3fconst int maxn = 1000+10;int dir[4][2]={-1,0,1,0,0,1,0,-1};char mp[maxn][maxn];int dis[maxn][maxn];int x_1,y_1,x_2,y_2;int n,m,k;struct node{ int x,y,k; node(int x,int y,int k):x(x),y(y),k(k){}};queue<node>q;void init(){ dis[x_1][y_1]=1; for(int i=0;i<4;i++) { for(int j=1;j<=k;j++) { int xx=x_1+dir[i][0]*j; int yy=y_1+dir[i][1]*j; if(1<=xx&&xx<=n&&1<=yy&&yy<=m&&mp[xx][yy]=='.') { dis[xx][yy]=1; q.push(node(xx,yy,1)); } else break; } }}void BFS(){ if(x_1==x_2&&y_1==y_2) { printf("0\n"); return; } init(); while(!q.empty()) { node x=q.front(); q.pop(); if(dis[x_2][y_2]) { printf("%d\n",dis[x_2][y_2]); return; } for(int i=0;i<4;i++) { for(int j=1;j<=k;j++) { int xx=x.x+dir[i][0]*j; int yy=x.y+dir[i][1]*j; if(1<=xx&&xx<=n&&1<=yy&&yy<=m&&mp[xx][yy]=='.') { if(!dis[xx][yy]) { dis[xx][yy]=x.k+1; q.push(node(xx,yy,x.k+1)); } } else break; } } } printf("-1\n");}int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++) scanf("%s",mp[i]+1); scanf("%d%d%d%d",&x_1,&y_1,&x_2,&y_2); met(dis,0); BFS();}
阅读全文
0 0
- Codeforces 877D
- codeforces 877D
- Codeforces 877 D Olya and Energy Drinks
- CodeForces 617D CodeForces 617D
- CodeForces 101D
- CodeForces 103D
- CodeForces 222D Olympiad
- codeforces 242d
- CodeForces 111D
- 【codeforces】3D
- CodeForces 127D Password
- codeforces 257D. Sum
- Codeforces 292D
- Codeforces 275D
- Codeforces 126D
- Codeforces 337d
- Codeforces D. Points
- codeforces 96D Volleyball
- 入阵曲+将军令
- 2输入一个字符判断是否属于a-zA-Z之间如果是请是属于a-z还是A-Z并且输出值。
- 朴素贝叶斯分类器
- python里使用正则表达式的前向搜索否定模式
- 大规模机器学习(二)
- codeforces 877D
- UART串口通信
- mysql数据库操作(二)
- BZOJ4256 推箱子
- vim 宏
- 获取文件信息
- okHttp单例封装
- JDK环境的搭建
- {A} + {B}