#include <bits/stdc++.h> #include "osalib.h" using namespace std; vector<vector<char> > v; int cnt; int xx, yy; void NowaWyspa(int x, int y, char **b) { v = vector<vector<char> >(x, vector<char>(y)); cnt = 0; for (int i=0; i<x; ++i) for (int j=0; j<y; ++j) { v[i][j] = b[i][j]; if (v[i][j] == 'K') { if (cnt == 0) xx = i, yy = j; ++cnt; } } } int NowaWarownia(int a, int b) { --a; --b; //cout << "start\n"; char cc = v[a][b]; v[a][b] = 'W'; if (cnt <= 1) return 1; vector<vector<int> > visited(v.size(), vector<int>(v[0].size(), 0)); visited[xx][yy] = 1; queue<pair<int, int> > q; q.push(make_pair(xx, yy)); int done = 1; while (!q.empty() && done < cnt) { int x = q.front().first; int y = q.front().second; //cout << x << " " << y << " " << done << " " << cnt << "\n"; q.pop(); int ii, jj; ii = x-1; jj = y; if (ii>=0 && ii<v.size() && jj>=0 && jj<v[0].size() && visited[ii][jj] == 0 && v[ii][jj] != 'W') { visited[ii][jj] = 1; q.push(make_pair(ii, jj)); if (v[ii][jj] == 'K') ++done; } ii = x+1; jj = y; if (ii>=0 && ii<v.size() && jj>=0 && jj<v[0].size() && visited[ii][jj] == 0 && v[ii][jj] != 'W') { visited[ii][jj] = 1; q.push(make_pair(ii, jj)); if (v[ii][jj] == 'K') ++done; } ii = x; jj = y-1; if (ii>=0 && ii<v.size() && jj>=0 && jj<v[0].size() && visited[ii][jj] == 0 && v[ii][jj] != 'W') { visited[ii][jj] = 1; q.push(make_pair(ii, jj)); if (v[ii][jj] == 'K') ++done; } ii = x; jj = y+1; if (ii>=0 && ii<v.size() && jj>=0 && jj<v[0].size() && visited[ii][jj] == 0 && v[ii][jj] != 'W') { visited[ii][jj] = 1; q.push(make_pair(ii, jj)); if (v[ii][jj] == 'K') ++done; } } if (done == cnt) return 1; v[a][b] = cc; return 0; } void PrzeniesOsade(int a1, int b1, int a2, int b2) { --a1; --b1; --a2; --b2; if (xx == a1 && yy == b1) xx = a2, yy = b2; v[a1][b1] = '.'; v[a2][b2] = 'K'; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include <bits/stdc++.h> #include "osalib.h" using namespace std; vector<vector<char> > v; int cnt; int xx, yy; void NowaWyspa(int x, int y, char **b) { v = vector<vector<char> >(x, vector<char>(y)); cnt = 0; for (int i=0; i<x; ++i) for (int j=0; j<y; ++j) { v[i][j] = b[i][j]; if (v[i][j] == 'K') { if (cnt == 0) xx = i, yy = j; ++cnt; } } } int NowaWarownia(int a, int b) { --a; --b; //cout << "start\n"; char cc = v[a][b]; v[a][b] = 'W'; if (cnt <= 1) return 1; vector<vector<int> > visited(v.size(), vector<int>(v[0].size(), 0)); visited[xx][yy] = 1; queue<pair<int, int> > q; q.push(make_pair(xx, yy)); int done = 1; while (!q.empty() && done < cnt) { int x = q.front().first; int y = q.front().second; //cout << x << " " << y << " " << done << " " << cnt << "\n"; q.pop(); int ii, jj; ii = x-1; jj = y; if (ii>=0 && ii<v.size() && jj>=0 && jj<v[0].size() && visited[ii][jj] == 0 && v[ii][jj] != 'W') { visited[ii][jj] = 1; q.push(make_pair(ii, jj)); if (v[ii][jj] == 'K') ++done; } ii = x+1; jj = y; if (ii>=0 && ii<v.size() && jj>=0 && jj<v[0].size() && visited[ii][jj] == 0 && v[ii][jj] != 'W') { visited[ii][jj] = 1; q.push(make_pair(ii, jj)); if (v[ii][jj] == 'K') ++done; } ii = x; jj = y-1; if (ii>=0 && ii<v.size() && jj>=0 && jj<v[0].size() && visited[ii][jj] == 0 && v[ii][jj] != 'W') { visited[ii][jj] = 1; q.push(make_pair(ii, jj)); if (v[ii][jj] == 'K') ++done; } ii = x; jj = y+1; if (ii>=0 && ii<v.size() && jj>=0 && jj<v[0].size() && visited[ii][jj] == 0 && v[ii][jj] != 'W') { visited[ii][jj] = 1; q.push(make_pair(ii, jj)); if (v[ii][jj] == 'K') ++done; } } if (done == cnt) return 1; v[a][b] = cc; return 0; } void PrzeniesOsade(int a1, int b1, int a2, int b2) { --a1; --b1; --a2; --b2; if (xx == a1 && yy == b1) xx = a2, yy = b2; v[a1][b1] = '.'; v[a2][b2] = 'K'; } |