Advertisement
gclaugus

/u/Dragonfliesfoos222

Dec 10th, 2015
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <utility>
  3. #include <set>
  4. #include <vector>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. bool has_partner(vector<string> &matrix, vector< vector<bool> > &partners,
  10.          int row, int col, int width, int height)
  11. {
  12.     char base = matrix[row][col];
  13.     if (partners[row][col]) {
  14.         return true;
  15.     }
  16.     else {
  17.         // check (row + 1, col)
  18.         if (row < (height - 1) && (base == matrix[row + 1][col])) {
  19.             partners[row + 1][col] = true;
  20.             partners[row][col] = true;
  21.         }
  22.         // check (row, col + 1)
  23.         if (col < (width - 1) && (base == matrix[row][col + 1])) {
  24.             partners[row][col + 1] = true;
  25.             partners[row][col] = true;
  26.         }
  27.         // check (row - 1, col)
  28.         if (row > 0 && (base == matrix[row - 1][col])) {
  29.             partners[row - 1][col] = true;
  30.             partners[row][col] = true;
  31.         }
  32.         // check (row, col - 1)
  33.         if (col > 0 && (base == matrix[row][col - 1])) {
  34.             partners[row][col - 1] = true;
  35.             partners[row][col] = true;
  36.         }
  37.         // check (row + 1, col + 1)
  38.         if (row < (height - 1) && col < (width - 1) &&
  39.             (base == matrix[row + 1][col + 1])) {
  40.             partners[row + 1][col + 1] = true;
  41.             partners[row][col] = true;
  42.         }
  43.         // check (row - 1, col - 1)
  44.         if (row > 0 && col > 0 && (base == matrix[row - 1][col - 1])) {
  45.             partners[row - 1][col - 1] = true;
  46.             partners[row][col] = true;
  47.         }
  48.         // check (row + 1, col - 1)
  49.         if (row < (height - 1) && col > 0 &&
  50.             (base == matrix[row + 1][col - 1])) {
  51.             partners[row + 1][col - 1] = true;
  52.             partners[row][col] = true;
  53.         }
  54.         // check (row - 1, col + 1)
  55.         if (row > 0 && col < (width - 1) &&
  56.             (base == matrix[row - 1][col + 1])) {
  57.             partners[row - 1][col + 1] = true;
  58.             partners[row][col] = true;
  59.         }
  60.     }
  61.     return partners[row][col];
  62. }
  63.  
  64. int main()
  65. {
  66.     string s;
  67.     vector<string> matrix;
  68.     vector< pair<int, int> > uniques;
  69.  
  70.     while (cin >> s) {
  71.         matrix.push_back(s);
  72.     }
  73.  
  74.     auto height = matrix.size();
  75.     auto width = matrix[0].size();
  76.  
  77.     vector< vector<bool> > partners(height, vector<bool>(width, false));
  78.  
  79.     for (int row = 0; row != height; ++row) {
  80.         for (int col = 0; col != width; ++col) {
  81.             if (has_partner(matrix, partners, row, col, width,
  82.                     height))
  83.                 continue;
  84.             else
  85.                 uniques.push_back(make_pair(row, col));
  86.         }
  87.     }
  88.  
  89.     if (uniques.size() > 0) {
  90.         cout << "UNIQUES:" << endl;
  91.         for (auto &p : uniques) {
  92.             cout << matrix[p.first][p.second] << " at "
  93.                  << "(" << p.first << ", " << p.second
  94.                  << ")" << endl;
  95.         }
  96.     }
  97.     else {
  98.         cout << "NO UNIQUES" << endl;
  99.     }
  100.  
  101.     return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement