本来是道简单题,可惜我总是读不懂题意。
1.看了半天才读懂独一无二是指这个值要唯一
2.8个相邻像素也要考虑边缘的5个邻居的情况
3.差值是指绝对值的差值
#include<cstdio>
#include<map>
using namespace std;
int arr[1005][1005];
int x,y,T;
map<int,int> mp;
int M,N;
int abs(int x){
return x<0?-x:x;
}
int check(int i,int j){
if(mp[arr[i][j]]!=1) return 0;//出现两次以上直接返回
for(int u=-1;u<=1;u++){
for(int v=-1;v<=1;v++){
if(u==0&&v==0) continue; //遍历中心形成的3x3矩阵,取掉中心位置
if(i+u<1||i+u>N||j+v<1||j+v>M) continue; //越界则跳过
if(abs(arr[i][j]-arr[i+u][j+v])<=T) return 0;
}
}
x=i,y=j;
return 1;
}
int main(){
mp.clear();
scanf("%d%d%d",&M,&N,&T);
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
scanf("%d",&arr[i][j]);
if(mp.find(arr[i][j])!=mp.end()){ //读入并记录出现的次数
mp[arr[i][j]]++;
}else{
mp[arr[i][j]]=1;
}
}
}
int cnt=0;
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
if(check(i,j)) {
cnt++;
}
}
}
if(cnt==0) printf("Not Exist\n");
else if(cnt>1) printf("Not Unique\n");
else printf("(%d, %d): %d\n",y,x,arr[x][y]);//先输出列,在输出行
return 0;
}