【非原创】codeforces 1063B Labyrinth 【01bfs】
2024-10-20 01:25:06
学习博客:戳这里
附本人代码:
1 #include <bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const int maxn = 2e3 + 10;
5 const ll mod = 998244353;
6 char st[maxn][maxn];
7 int vis[maxn][maxn];
8 int dx[11]={1,-1, 0, 0};
9 int dy[11]={0, 0, 1,-1};
10 const int inf = 0x3f3f3f3f;
11 struct nod{
12 int x, y;
13 };
14 int main() {
15
16 int n, m;
17 int r, c;
18 int X, Y;
19 scanf("%d %d", &n, &m);
20 scanf("%d %d", &r, &c);
21 scanf("%d %d", &X, &Y);
22 for(int i = 1; i <= n; ++i) {
23 scanf("%s", st[i]+1);
24 }
25 memset(vis, inf, sizeof(vis));
26 deque<nod>q;
27 nod u, v;
28 u.x = r, u.y = c;
29 q.push_front(u);
30 vis[u.x][u.y] = 0;
31 while(!q.empty()) {
32 u = q.front(); q.pop_front();
33 for(int i = 0; i < 4; ++i) {
34 int xx = u.x + dx[i];
35 int yy = u.y + dy[i];
36 if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && st[xx][yy] != '*') {
37 if(vis[u.x][u.y] + (i==2) < vis[xx][yy]) {
38 vis[xx][yy] = vis[u.x][u.y] + (i==2);
39 v.x = xx, v.y = yy;
40 if(i == 2) q.push_back(v);
41 else q.push_front(v);
42 }
43 }
44 }
45 }
46 int ans = 0;
47 for(int i = 1; i <= n; ++i) {
48 for(int j = 1; j <= m; ++j) {
49 if(vis[i][j] <= Y && vis[i][j] - j + c <= X) {
50 // printf("%d %d %d\n", vis[i][j], i, j);
51 ++ans;
52 }
53 }
54 }
55 printf("%d\n", ans);
56 return 0;
57 }
最新文章
- Python列表去重
- 父页面操作iframe子页面的安全漏洞及跨域限制问题
- Maven之安装与简单入门一
- IOS开发之新浪围脖
- Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合例子(附完整的请假流程例子,jbpm基础,常见问题解决)
- PowerDesigner之PDM检查
- 如何在eclipse中添加android ADT
- Java获取线程的对象和名称
- 362. Design Hit Counter
- Spring配置文件的xsd知识点
- Nginx设置防止IP及非配置域名访问
- linux 安装Brew
- script weixin app / weixin xiao chen xu
- SpringBoot笔记十五:任务
- SQL笔试基础
- 【xsy2193】Wallace 最大权闭合子图
- SQL server 数据库基本插入、删除命令
- 利用Python和webhook实现自动提交代码
- AWS S3 CLI的安装和配置
- page_address()函数分析