Magic Square Algorithm
1 2 3
1 2 3
1 2 9
Step 1
Generate all permuation from $1, \dots , 9$
                        void perm2(List prefix, List list){
                            if(list.size() == 0){
                                for(Integer num : prefix){
                                    System.out.print(num);
                                }
                                System.out.println();
                            }
                            for(int i=0; i newList = new ArrayList(list);
                                List < Integer> newPrefix = new ArrayList(prefix);
                                newPrefix.add(newList.get(i));
                                newList.remove(i);
                                perm2(newPrefix,  newList);
                            }
                        }
            
Step 2
Use Naive Algorithm check each permuation
                        boolean checkRowCol(int[][] array, int initSum){
                            int height = array.length;
                            for(int j=0; j < height; j++){
                                int vs = 0;
                                int hs = 0;
                                for(int i=0; i < height; i++){
                                    vs += array[j][i];
                                    hs += array[i][j];
                                }
                                if(initSum != vs || initSum != hs)
                                    return false;
                            }
                            return true;
                        }
                        boolean checkDiagonal(int[][] array, int initSum){
                            int len   = array.length;
                            int maind  = 0;
                            int minord = 0;

                            for(int i=0; i < len; i++){
                                maind += array[i][i];
                                minord += array[len-1-i][i];
                            }
                            return initSum == maind && initSum == minord;
                        }