Asumsikan diberikan array dua dimensi terurut, setiap baris bertambah dari kiri ke kanan, dan setiap kolom bertambah dari atas ke bawah. Cara menyelesaikan suatu fungsi, masukkan array dua dimensi dan bilangan bulat, dan tentukan apakah bilangan bulat ada dalam array dua dimensi ini.
Asumsikan array dua dimensi berurut 4×4:
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
Nomor yang Anda cari adalah 6.
Ide inti dari algoritme ini adalah pertama-tama ambil angka 9 di pojok kiri atas. Karena 9 lebih besar dari 6, Anda dapat mengecualikan angka yang lebih besar dari 9, yaitu kolom keempat, lalu mengambil 8. Demikian pula, kecualikan kolom ketiga, lalu ambil 2. Jika lebih kecil dari 6, Anda dapat mengecualikan angka yang lebih kecil dari 2, yaitu baris pertama, ambil 4, kecualikan baris kedua, ambil 7, kecualikan kolom kedua, ambil 4, kecualikan baris ketiga, ambil 6, sama, kembalikan true.
Di sini kita menggunakan rekursi untuk mengimplementasikannya, kodenya adalah:
Copy kode kodenya sebagai berikut:
kelas publik FindMatrixNumber {
contoh FindMatrixNumber statis pribadi;
boolean statis pribadi ditemukan = false;
FindMatrixNumber statis publik getInstance() {
jika (contoh == nol) {
contoh = FindMatrixNumber baru();
}
contoh kembali;
}
boolean statis publik temukan(int matriks[][], int bilangan) {
if (matriks == null || matriks.panjang == 0 || matriks[0].panjang == 0) {
kembali salah;
} kalau tidak {
System.out.println("****Mulai mencari****");
findMatrixNumber(matriks, matriks.panjang, 0, matriks[0].panjang,
nomor);
System.out.println("****Akhirnya ditemukan*****");
}
pengembalian ditemukan;
}
private static void findMatrixNumber(int matriks[][], int baris, int baris,
int kolom, int angka) {
jika (baris > baris - 1)
kembali;
int cornerNumber = matriks[baris][kolom - 1];
System.out.println(nomor sudut);
if (nomor sudut == angka) {
ditemukan = benar;
kembali;
} else if (nomor sudut < angka) {
findMatrixNumber(matriks, baris, ++baris, kolom, angka);
} else if (nomor sudut > nomor) {
findMatrixNumber(matriks, baris, baris, --kolom, bilangan);
}
}
}
Kode tesnya adalah:
Copy kode kodenya sebagai berikut:
kelas publik TestFindMatrixNumber {
public static void main(String[] args) {
int matriks[][] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
System.out.println(FindMatrixNumber.find(matriks, 6));
}
}
Hasil dari menjalankan kode pengujian adalah:
Copy kode kodenya sebagai berikut:
****Mulai mencari****
9
8
2
4
7
4
6
*****Akhir menemukan*****
BENAR