package javaapplication40; import java.util.ArrayList; import java.util.List; public class JavaApplication40 { public static boolean IsPrime(int number) {//Burda matris elemanı asal mı degil mi if(number == 1) return false; for(int i=2;i<=number/2;i++){ if(number%i==0){ return false; } } return true; } public static int FirstX; public static int FirstY; public static int FirstNonPrime(ArrayList<List<Integer>> Mat) { // Burda piramidin en ustnden ilk asal olmayan sayıyı ve indexini buluyoruz for(int i=0;i<Mat.size();i++){ for(int j=0;j<Mat.get(0).size();j++){ if(!IsPrime(Mat.get(i).get(j))){ FirstX=i; FirstY=j; return Mat.get(i).get(j); } } } return 0; } private static boolean isSafe( ArrayList<List<Integer>> Mat, int visited[][], int x, int y) {//Bu metod gidecegimiz noktanın uygun olup olmadıgını kontrol eder return !(IsPrime(Mat.get(x).get(y))==true || visited[x][y] != 0); } private static boolean isValid(int x, int y ,ArrayList<List<Integer>> Mat) //Burası matris dısına cıkmamak icin { return (x < Mat.size() && y < Mat.get(0).size() && x >= 0 && y >= 0); } public static int toplam=0; public static long MaxSum=0; public static void FindMaxSum(ArrayList<List<Integer>> Mat, int visited[][],int i, int j, int x, int y){ visited[i][j] = 1; if (isValid(i + 1, j - 1 , Mat) && isSafe(Mat, visited, i + 1, j - 1)) // sol asagı { toplam+=Mat.get(i+1).get(j-1); FindMaxSum(Mat, visited, i + 1, j -1, x, y); } if (isValid(i + 1, j , Mat) && isSafe(Mat, visited, i + 1, j )) // asagı { toplam+=Mat.get(i+1).get(j); FindMaxSum(Mat, visited, i + 1, j , x, y); } if (isValid(i + 1, j + 1 , Mat) && isSafe(Mat, visited, i + 1, j + 1)) // sag { toplam+=Mat.get(i+1).get(j+1); FindMaxSum(Mat, visited, i + 1, j +1, x, y); } if(MaxSum<toplam) MaxSum=toplam; toplam-=Mat.get(i).get(j);//ger dondugunde tolamdan cıkar visited[i][j]=0; } ArrayList<List<Integer>> Mat = new ArrayList<List<Integer>>(); /*int[][] mat = { {215,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {193,124,0,0,0,0,0,0,0,0,0,0,0,0,0}, {117,237,442,0,0,0,0,0,0,0,0,0,0,0,0}, {218,935,347,235,0,0,0,0,0,0,0,0,0,0,0}, {320,804,522,417,345,0,0,0,0,0,0,0,0,0,0}, {229,601,723,835,133,124,0,0,0,0,0,0,0,0,0}, {248,202,277,433,207,263,257,0,0,0,0,0,0,0,0}, {359,464,504,528,516,716,871,182,0,0,0,0,0,0,0}, {461,441,426,656,863,560,380,171,923,0,0,0,0,0,0}, {381,348,573,533,447,632,387,176,975,449,0,0,0,0,0}, {223,711,445,645,245,543,931,532,937,541,444,0,0,0,0}, {330,131,333,928,377,733,017,778,839,168,197,197,0,0,0}, {131,171,522,137,217,224,291,413,528,520,227,229,928,0,0}, {223,626,34,683,839,53,627,310,713,999,629,817,410,121,0}, {924,622,911,233,325,139,721,218,253,223,107,233,230,124,233} };*/ /*int[][] mat = { {0,1,0,0,0}, {0,8,4,0,0}, {2,0,6,9,0}, {8,5,0,9,3} };*/ int[][] mat = { {215,0,0,0,0}, {193,124,0,0,0}, {117,237,442,0,0}, {218,935,347,235,0}, {320,804,522,417,345} }; for(int i=0;i<mat.length;i++){ Mat.add( new ArrayList<Integer>()); for(int j=0;j<mat[0].length;j++){ Mat.get(i).add(mat[i][j]); } } for(int i=0;i<Mat.size();i++){ for(int j=0;j<Mat.get(0).size();j++){ } } int[][] visited = new int[Mat.size()][Mat.get(0).size()];//M=Mat.size() N=Mat.get(0).size() toplam+=FirstNonPrime(Mat); //piramitteki ilk asal olmayan sayıyı bul FindMaxSum( Mat, visited, FirstX, FirstY, 20, 20); } }