Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <queue>
- using namespace std;
- typedef vector<vector<char> > Graf;
- bool pos_ok(int x, int y, int i, int j)
- {
- return (i >= 0 and i < x and j >= 0 and j < y);
- }
- void escriure_g(Graf& g, int x, int y) {
- for (int i = 0; i < x; ++i) {
- for (int j = 0; j < y; ++j) {
- cin >> g[i][j];
- }
- }
- }
- void mostrar_g(const Graf& g, int x, int y) {
- for (int i = 0; i < x; ++i) {
- for (int j = 0; j < y; ++j) {
- cout << g[i][j] << " ";
- }
- cout << endl;
- }
- }
- int bfs(Graf& g, int x, int y, int i, int j) {
- int suma = 0;
- int dir[8] = {0, 1, 1, 0, 0, -1, -1, 0};
- queue <pair<int, int> > q;
- q.push(make_pair(i,j));
- while(not q.empty()) {
- pair<int, int> p = q.front(); q.pop();
- if(g[p.first][p.second] == 't') ++suma;
- g[p.first][p.second] = 'X';
- for (int i = 0; i < 8; i+=2) {
- int a = p.first+dir[i], b = p.second+dir[i+1];
- if (pos_ok(x,y,a,b) and g[a][b] != 'X') q.push(make_pair(a,b));
- }
- }
- return suma;
- }
- int main()
- {
- int x, y;
- cin >> x >> y;
- Graf g (x, vector<char> (y));
- escriure_g(g,x,y);
- int i, j;
- cin >> i >> j;
- --i; --j;
- cout << bfs(g,x,y,i,j) << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement