题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805265579229184
分析:首先是map的应用,记录该像素出现的次数;再就是题目虽说是周围8个点,但是实际意思就是和它周围的点,所以边缘的点也要考虑进去;
代码:
#include<iostream>
using namespace std;
#include<vector>
#include<string>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<cstdlib>
#include<map>
map<int,int> v;
int m,n,tol;
int a[1005][1005];
int map1[8]={-1,-1,-1,0,0,1,1,1};
int map2[8]={-1,0,1,-1,1,-1,0,1};
bool check(int i,int j) //检查
{
int x,y;
for(int N=0;N<8;N++)
{
x=i+map1[N];
y=j+map2[N];
if(x>=0&&x<n&&y>=0&&y<m&&abs(a[x][y]-a[i][j])<=tol)
return false;
}
return true;
}
int main()
{
cin>>m>>n>>tol;
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cin>>a[i][j];
v[a[i][j]]++; //记录该像素点出现的次数
}
}
int cnt=0;
int k,l;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(v[a[i][j]]==1&&check(i,j))
{
cnt++;
k=i;
l=j;
// cout<<i<<j<<endl;
}
}
}
if(cnt==1) printf("(%d, %d): %d",l+1,k+1,a[k][l]);
else if(cnt==0) cout<<"Not Exist";
else if(cnt>1) cout<<"Not Unique";
return 0;
}