Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <utility>
- #include <set>
- #include <vector>
- #include <string>
- using namespace std;
- bool has_partner(vector<string> &matrix, vector< vector<bool> > &partners,
- int row, int col, int width, int height)
- {
- char base = matrix[row][col];
- if (partners[row][col]) {
- return true;
- }
- else {
- // check (row + 1, col)
- if (row < (height - 1) && (base == matrix[row + 1][col])) {
- partners[row + 1][col] = true;
- partners[row][col] = true;
- }
- // check (row, col + 1)
- if (col < (width - 1) && (base == matrix[row][col + 1])) {
- partners[row][col + 1] = true;
- partners[row][col] = true;
- }
- // check (row - 1, col)
- if (row > 0 && (base == matrix[row - 1][col])) {
- partners[row - 1][col] = true;
- partners[row][col] = true;
- }
- // check (row, col - 1)
- if (col > 0 && (base == matrix[row][col - 1])) {
- partners[row][col - 1] = true;
- partners[row][col] = true;
- }
- // check (row + 1, col + 1)
- if (row < (height - 1) && col < (width - 1) &&
- (base == matrix[row + 1][col + 1])) {
- partners[row + 1][col + 1] = true;
- partners[row][col] = true;
- }
- // check (row - 1, col - 1)
- if (row > 0 && col > 0 && (base == matrix[row - 1][col - 1])) {
- partners[row - 1][col - 1] = true;
- partners[row][col] = true;
- }
- // check (row + 1, col - 1)
- if (row < (height - 1) && col > 0 &&
- (base == matrix[row + 1][col - 1])) {
- partners[row + 1][col - 1] = true;
- partners[row][col] = true;
- }
- // check (row - 1, col + 1)
- if (row > 0 && col < (width - 1) &&
- (base == matrix[row - 1][col + 1])) {
- partners[row - 1][col + 1] = true;
- partners[row][col] = true;
- }
- }
- return partners[row][col];
- }
- int main()
- {
- string s;
- vector<string> matrix;
- vector< pair<int, int> > uniques;
- while (cin >> s) {
- matrix.push_back(s);
- }
- auto height = matrix.size();
- auto width = matrix[0].size();
- vector< vector<bool> > partners(height, vector<bool>(width, false));
- for (int row = 0; row != height; ++row) {
- for (int col = 0; col != width; ++col) {
- if (has_partner(matrix, partners, row, col, width,
- height))
- continue;
- else
- uniques.push_back(make_pair(row, col));
- }
- }
- if (uniques.size() > 0) {
- cout << "UNIQUES:" << endl;
- for (auto &p : uniques) {
- cout << matrix[p.first][p.second] << " at "
- << "(" << p.first << ", " << p.second
- << ")" << endl;
- }
- }
- else {
- cout << "NO UNIQUES" << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement