Hay muchos puntos en esta pregunta. En primer lugar, tenga en cuenta que el píxel requerido debe ser el único que aparece. Puede usar el mapa para registrar el número de veces que aparece cada píxel de entrada. Luego, los píxeles en el círculo del lado también deben ser juzgados (el título dice claramente que hay 8 píxeles alrededor, pensé que el círculo del lado no se cuenta), puede aumentar la fila y la columna de la matriz de píxeles por 1 y asígnelo a -tol -1 para lograrlo (consulte el código para obtener más detalles).
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <map>
using namespace std;
int m, n, tol;
int MIN = -tol-1;
int gap(int a, int b){
return abs(a-b);
}
int main(){
map<int,int> time;
scanf("%d %d %d", &m, &n, &tol);
int arr[n+2][m+2];
fill(arr[0], arr[0]+(n+2)*(m+2), MIN);
int num = 0;
int row, col, res;
bool flag[n+1][m+1] = {
false};
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
scanf("%d", &arr[i][j]);
time[arr[i][j]]++;
}
}
int t, t1, t2, t3, t4, t5, t6, t7, t8;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
t = arr[i][j];
t1 = arr[i-1][j-1];
t2 = arr[i-1][j];
t3 = arr[i-1][j+1];
t4 = arr[i][j+1];
t5 = arr[i+1][j+1];
t6 = arr[i+1][j];
t7 = arr[i+1][j-1];
t8 = arr[i][j-1];
if(gap(t,t1)>tol && gap(t,t2)>tol && gap(t,t2)>tol && gap(t,t3)>tol && gap(t,t4)>tol && gap(t,t5)>tol && gap(t,t6)>tol && gap(t,t7)>tol && gap(t,t8)>tol){
flag[i][j] = true;
}
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(flag[i][j]){
if(time[arr[i][j]] == 1){
num++;
row = i;
col = j;
res = arr[i][j];
}
}
}
}
if(num == 0){
printf("Not Exist");
}else if(num > 1){
printf("Not Unique");
}else{
printf("(%d, %d): %d", col, row, res);
}
return 0;
}