两个错误答案,一个超时点,输入格式还有特殊情况估计没有考虑到所以。QWQ,难受,等二刷的时候再解决这个问题,思路都在代码里面
import java.io.BufferedReader;
import java.io.InputStreamReader;
/**
*输入模式 col row tol(颜色差阈值)
* 题中行列的下标都是从1开始
* 在判断的时候使用从0开始的下标,输出唯一坐标后row+1,col+1
* */
public class p1068 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] inputInfo=br.readLine().split("[ ]");
int col=Integer.parseInt(inputInfo[0]);
int row=Integer.parseInt(inputInfo[1]);
int tol=Integer.parseInt(inputInfo[2]);
int[][] nums=new int[row][col];
for (int i = 0; i <row ; i++) {//开始构建矩阵
String [] rowNums=br.readLine().split("\\s+|\\t");
//构建矩阵中对应的行元素
for (int j = 0; j <rowNums.length ; j++) {
nums[i][j]=Integer.parseInt(rowNums[j]);
}
}
//初始化完成矩阵,开始判断
/**
* 当前元素 nums[i][j]
* 判断 nums[i-1][j-1] nums[i-1][j+1] nums[i+1][j-1] nums[i+1][j+1]是否存在,存在开始考虑
* 判断ij周围元素与它的差值,如果全部在阈值范围之外则被判为特殊点,此时count++,当count>1
* 输入not unique
*
* 时间复杂度为o(n^2)
* */
if(row<=2||col<=2) {//排除特殊矩阵
System.out.println("Not Exist");
return;
}
int count=0;
int resRow=0;
int resCol=0;
int result=0;
for (int i = 1; i <row-1 ; i++) {
for (int j = 1; j <col-1 ; j++) {
//开始判断元素与周围元素的大小
/**
* 对应8 个元素为
* nums[i-1][j-1] nums[i-1][j] nums[i-1][j+1]
* nums[i][j-1] nums[i][j+1]
* nums[i+1][j-1] nums[i+1][j] nums[i+1][j+1]
* */
int r1=-(nums[i-1][j-1]-nums[i][j]);
int r2=-(nums[i-1][j]-nums[i][j]);
int r3=-(nums[i-1][j+1]-nums[i][j]);
int r4=-(nums[i][j-1]-nums[i][j]);
int r5=-(nums[i][j+1]-nums[i][j]);
int r6=-(nums[i+1][j-1]-nums[i][j]);
int r7=-(nums[i+1][j]-nums[i][j]);
int r8=-(nums[i+1][j+1]-nums[i][j]);
if(r1<tol||r2<tol||r3<tol||r4<tol||r5<tol||r6<tol||r7<tol||r8<tol){
continue;
}else{
count++;
if(count>1){
break;
}else{
resRow=i+1;
resCol=j+1;
result=nums[i][j];
}
}
}
}
if(count>1){
System.out.println("Not Unique");
}else if(count==1){
System.out.printf("(%d, %d): %d", resCol, resRow, result);
}else{
System.out.println("Not Exist");
}
}
}