上一篇写的代码真是太过冗余了
优化过后的代码如下:
#include <iostream>
#include <unordered_map>
using namespace std;
int pixel[1000][1000] = { 0 };
unordered_map<int, int>flag;
bool tolfunc(int i, int j, int(*array)[1000], int tolValue, int& unique, int m, int n)
{
int dx[] = { -1,0,1,-1,1,-1,0,1 };
int dy[] = { -1,-1,-1,0,0,1,1,1 };
if (flag[pixel[i][j]]==1)
{
for (int k = 0; k < 8; k++)
{
int x = i + dx[k];
int y = j+ dy[k];
if (x >= n || x < 0 || y < 0 || y >= m)
continue;
if (abs(array[i][j] - array[x][y]) <= tolValue)
{
return false;
}
}
}
else
{
return false;
}
return true;
}
int main()
{
int m, n,tol,unique;
cin >> m >> n >> tol;
unique = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
int temp;
cin >> temp;
pixel[i][j] = temp;
flag[pixel[i][j]]++;
}
}
int x, y;
int value = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
bool ret=tolfunc(i, j, pixel, tol, unique,m,n);
if (ret)
{
unique++;
x = i;
y = j;
value = pixel[i][j];
}
}
}
if (unique == 1)
{
cout << "(" << y + 1 << ", " << x + 1 << "): " << value << endl;;
}
if (unique == 0)
cout << "Not Exist" << endl;
if (unique >= 2)
{
cout << "Not Unique" << endl;
}
}