Próbowałeś może najprostszego breadth/depth first search?
Trawersowanie grafu? to jak z armaty do muchy)
próbowałem iteracyjnie przechodzić najpierw po wierszach później po kolumnach w zasięgu danej liczby i dodawać lokalizacje liczb "do wyzerowania" do tymczasowej tablicy i na koniec po prostu >
pętla wyzerowac liczby ze zgromadzonych lokalizacji.
Dziwne, bo tak właśnie można to rozwiązać, funkcja z
zeruje wiersz i kolumnę o danych współrzędnych, struktura Coordinates
przechowuje współrzędne do wyzerowania:
class Main {
static class Coordinates {
public int a, b;
}
static int [][] z(int [][] arr, int sz, int x, int y) {
for (int i = 0; i < sz; i++)
arr[x][i] = 0;
for (int i = 0; i < sz; i++)
arr[i][y] = 0;
return arr;
}
static int [][] zeroArray(int [][] arr, int sz, int x, int y) {
if (0 == arr[x][y]) return arr;
else if (1 == arr[x][y]) {arr[x][y] = 0; return arr;}
else{
Coordinates [] c = new Coordinates[sz * sz];
for (int i = 0; i < sz * sz; ++i)
c[i] = new Coordinates();
int cnt = 0;
for (int i = 0; i < sz; i++) {
if (1 < arr[x][i]){
c[cnt].a = x;
c[cnt].b = i;
++cnt;
}
}
for (int i = 0; i < sz; i++) {
if (1 < arr[i][y]){
c[cnt].a = i;
c[cnt].b = y;
++cnt;
}
}
for (int i = 0; i < cnt; ++i)
arr = z(arr, sz, c[i].a, c[i].b);
return arr;
}
}
static void printArray(int [][] arr, int sz){
for (int i = 0; i < sz; i++) {
for (int j = 0; j < sz; j++){
System.out.print(arr[i][j]);
System.out.print(" ");
}
System.out.println();
}
}
public static void main(String[] args) {
int n = 4;
int [][] a = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++){
a[i][j] = 1;
}
}
a[1][1] = 2;
a[1][3] = 2;
printArray(a, n);
a = zeroArray(a, 4, 1, 1);
System.out.println(" ");
printArray(a, n);
}
}