坑点
1、题目说的是周围8个相邻像素,但是实际上边边角角上的像素都要考虑(测试点3 、5)
2、算色差时是需要加绝对值的
实现
#include <cstdio>
#include <cmath>
#include <vector>
typedef long long LL;
using namespace std;
int main()
{
int M, N, tol,i,j,x=-1,y=-1,count=0,m,n; //x 列 y 行 从1开始
vector<LL> num;
scanf("%d %d %d", &M, &N, &tol);
LL ** matrix = new LL*[N];
for (i = 0; i < N; i++)
matrix[i] = new LL[M];
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
scanf("%lld", &matrix[i][j]);
}
}
for (i = 0; i < N; i++)
{
if (num.size() > 1) break;
for (j = 0; j < M; j++)
{
=
if (i - 1 >= 0 && j - 1 >= 0 && abs(matrix[i][j] - matrix[i - 1][j - 1]) <= tol) continue;
if (i - 1 >= 0 && abs(matrix[i][j] - matrix[i - 1][j]) <= tol) continue;
if (i - 1 >= 0 && j + 1 < M && abs(matrix[i][j] - matrix[i - 1][j + 1]) <= tol) continue;
if (j - 1 >= 0 && abs(matrix[i][j] - matrix[i][j - 1]) <= tol) continue;
if (j + 1 < M && abs(matrix[i][j] - matrix[i][j + 1]) <= tol) continue;
if (i + 1 < N && j - 1 >= 0 && abs(matrix[i][j] - matrix[i + 1][j - 1]) <= tol) continue;
if (i + 1 < N && abs(matrix[i][j] - matrix[i + 1][j]) <= tol) continue;
if (i + 1 < N && j + 1 < M && abs(matrix[i][j] - matrix[i + 1][j + 1]) <= tol) continue;
bool isSame = false;
for (n = 0; n < N; n++) //确保是唯一的
{
for (m = 0; m < M; m++)
{
if (matrix[n][m] == matrix[i][j] && (n != i || m != j))
{
isSame = true; break;
}
}
}
if (!isSame)
{
num.push_back(matrix[i][j]);
x = j + 1;
y = i + 1;
}
}
}
if (num.size() == 1)
{
printf("(%d, %d): %lld", x, y, matrix[y-1][x-1]);
}
else if (num.size() == 0)
printf("Not Exist");
else if (num.size() >= 2)
printf("Not Unique");
return 0;
}