Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define ff first
- #define ss second
- int n, m, vis[25][25];
- char grid[25][25];
- bool push_this(int i, int j)
- {
- if(i >= 0 && i < n && j >= 0 && j < m && vis[i][j] == 0 && grid[i][j] != '#')
- return 1;
- return 0;
- }
- int bfs(int i, int j)
- {
- pair<int, int> point;
- queue <pair<int, int> > q;
- q.push({i, j});
- while(!q.empty())
- {
- point = q.front();
- q.pop();
- if(grid[point.ff][point.ss] == 'h')
- return vis[point.ff][point.ss];
- if(push_this(point.ff - 1, point.ss))
- {
- q.push({point.ff - 1, point.ss});
- vis[point.ff - 1][point.ss] = vis[point.ff][point.ss] + 1;
- }
- if(push_this(point.ff + 1, point.ss))
- {
- q.push({point.ff + 1, point.ss});
- vis[point.ff + 1][point.ss] = vis[point.ff][point.ss] + 1;
- }
- if(push_this(point.ff, point.ss - 1))
- {
- q.push({point.ff, point.ss - 1});
- vis[point.ff][point.ss - 1] = vis[point.ff][point.ss] + 1;
- }
- if(push_this(point.ff, point.ss + 1))
- {
- q.push({point.ff, point.ss + 1});
- vis[point.ff][point.ss + 1] = vis[point.ff][point.ss] + 1;
- }
- }
- }
- int main()
- {
- int i, j, t, caseno = 0, ax[3], ay[3];
- scanf("%d", &t);
- while(t--)
- {
- scanf("%d %d", &n, &m);
- for(i = 0; i < n; i++)
- {
- scanf("%s", grid[i]);
- for(j = 0; j < m; j++)
- {
- if(grid[i][j] == 'm')
- grid[i][j] == '#';
- else if(grid[i][j] >= 'a' && grid[i][j] <= 'c')
- {
- ax[grid[i][j] - 'a'] = i;
- ay[grid[i][j] - 'a'] = j;
- grid[i][j] = '.';
- }
- }
- }
- int mx = -1, temp;
- for(i = 0; i < 3; i++)
- {
- memset(vis, 0, sizeof(vis));
- mx = max(mx, bfs(ax[i], ay[i]));
- }
- printf("Case %d: %d\n", ++caseno, mx);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement