此题有坑
1.独一无二的点
2.边上的点例如没有左边的点则认为成立
3.考虑色差正负是都可以的,而不用一定要同正或同负
代码如下
#include <cstdio>
#include <cmath>
using namespace std;
int n,m,tap,a[1500][1500],kase=0,aa,bb;
int hh(int x,int y,int i,int j);
void haha();
int mmp(int x,int y);
int main()
{
scanf("%d%d%d",&m,&n,&tap);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
haha();
if(!kase)
printf("Not Exist");
else if(kase==1)
printf("(%d, %d): %d",bb,aa,a[aa][bb]);
else
printf("Not Unique");
return 0;
}
int hh(int x,int y,int i,int j)
{
if(x<1||y<1||x>n||y>m) return 1;//越界认为可以
int w=a[i][j]-a[x][y];
if(abs(w)>tap) return 1;//正负用绝对值
return 0;
}
void haha()//八个点判断
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(hh(i-1,j-1,i,j))
if(hh(i-1,j,i,j))
if(hh(i-1,j+1,i,j))
if(hh(i,j-1,i,j))
if(hh(i,j+1,i,j))
if(hh(i+1,j-1,i,j))
if(hh(i+1,j,i,j))
if(hh(i+1,j+1,i,j))
if(mmp(i,j))
{
kase++;
aa=i,bb=j;
// printf("%d ,%d %d\n",aa,bb,a[aa][bb]);
if(kase>1) return ;
}
}
}
int mmp(int x,int y)//独一无二判断
{
for(int k=1;k<=n;k++)
for(int l=1;l<=m;l++)
{
if(k==x&&l==y) continue;
if(a[k][l]==a[x][y]) return 0;
}
return 1;
}