日常训练17-10-25

Posted yijiull

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日常训练17-10-25相关的知识,希望对你有一定的参考价值。

CF877

链接

 

D. Olya and Energy Drinks

bfs

技术分享
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn =1010;
 4 
 5 char mp[maxn][maxn];
 6 int vis[maxn][maxn], dis[maxn][maxn];
 7 
 8 struct Node{
 9     int x, y;
10     Node(int x = 0, int y = 0) : x(x), y(y) {}
11 };
12 
13 int d[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
14 int sx, sy, ex, ey;
15 int n, m, k;
16 
17 void bfs(){
18     Node p1, p2;
19     queue<Node> q;
20     q.push(Node(sx, sy));
21     vis[sx][sy] = (1<<4) - 1;
22     dis[sx][sy] = 0;
23     while(!q.empty()){
24         p2 = q.front();
25         q.pop();
26         if(p2.x == ex && p2.y == ey) return ;
27         for(int i = 0; i < 4; i++){
28             for(int j = 1; j <= k; j++){
29                 int dx = p2.x + d[i][0] * j;
30                 int dy = p2.y + d[i][1] * j;
31                 if(dx < 0 || dx >= n || dy < 0 || dy >= m || mp[dx][dy] == #) break;
32                 if(vis[dx][dy] & (1<<i)) break;
33                 int ok = 0;
34                 if(!vis[dx][dy]) ok = 1;
35                 vis[dx][dy] |= (1<<i);
36                 if(ok){
37                     dis[dx][dy] = dis[p2.x][p2.y] + 1;
38                     q.push(Node(dx, dy));
39                 }
40             
41             }
42             
43         }
44     }
45     
46 }
47 
48 int main(){
49     //freopen("in.txt", "r", stdin);
50     memset(dis, -1, sizeof(dis));
51     memset(vis, 0, sizeof(vis));
52     scanf("%d %d %d", &n, &m, &k);
53     for(int i = 0; i < n; i++) scanf("%s", mp[i]);
54     scanf("%d %d %d %d", &sx, &sy, &ex, &ey);
55     sx--; sy--; ex--; ey--;
56     bfs();
57     printf("%d\n", dis[ex][ey]);
58 }
View Code

 

以上是关于日常训练17-10-25的主要内容,如果未能解决你的问题,请参考以下文章

集训队日常训练20181110 DIV210 题解及AC代码

日常训练2020-02-08训练

「日常训练」All Friends(POJ-2989)

「日常训练」The Necklace(UVA-10054)

VsCode 代码片段-提升研发效率

sublimetext3中保存代码片段