فقط اون کد بازی 8پازل رو هم نوشتم - کپی پیست کنید نظرتونو بگید . مهمه برام .
package Two;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Array;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Queue;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import javax.naming.SizeLimitExceededException;
import javax.swing.plaf.synth.SynthScrollPaneUI;
public class BinarySearchTree {
public static Node root;
public BinarySearchTree(){
this.root = null;
}
public static int cout = 0 , count1 = 0;
public boolean find(String id){
Node current = root;
while(current!=null){
if(current.data.equals(id)){
return true;
}else if(current.data.compareTo(id) > 0){
current = current.left;
}else{
current = current.right;
}
}
return false;
}
public void DO(String a){
String arr[][] = new String [3][3];
arr = toArr(a);
int zero[] = findZero(arr);
if(zero == null){
System.out.println(a + " zero nadare !!");
}
else{
toMatrixs(zero[0] , zero[1] , arr);
}
}
public void toMatrixs(int i , int j , String arr[][]){
if(j-1 >= 0){
arr[i][j] = arr[i][j-1];
arr[i][j-1] = "0";
addArr2Tree(arr);
arr[i][j-1] = arr[i][j];
arr[i][j] = "0";
}
if(j+1 <= 2){
arr[i][j] = arr[i][j+1];
arr[i][j+1] = "0";
addArr2Tree(arr);
arr[i][j+1] = arr[i][j];
arr[i][j] = "0";
}
if(i-1 >= 0){
arr[i][j] = arr[i-1][j];
arr[i-1][j] = "0";
addArr2Tree(arr);
arr[i-1][j] = arr[i][j];
arr[i][j] = "0";
}
if(i+1 <= 2){
arr[i][j] = arr[i+1][j];
arr[i+1][j] = "0";
addArr2Tree(arr);
arr[i+1][j] = arr[i][j];
arr[i][j] = "0";
}
}
public void addArr2Tree(String arr[][]){
String a = Arr2Str(arr);
if(!find(a)){
insert(a);
count1++;
}
}
public String Arr2Str(String arr[][]){
String a = "";
a += arr[0][0];
a += arr[0][1];
a += arr[0][2];
a += arr[1][0];
a += arr[1][1];
a += arr[1][2];
a += arr[2][0];
a += arr[2][1];
a += arr[2][2];
return a;
}
public int[] findZero(String arr[][]){
int result[] = new int [2] ;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if(arr[i][j].equals("0"))
{
result[0] = i;
result[1] = j;
return result ;
}
}
}
return null;
}
public String [][] toArr(String a){
String arr [][]= new String [3][3];
arr[0][0] = a.charAt(0)+"";
arr[0][1] = a.charAt(1)+"";
arr[0][2] = a.charAt(2)+"";
arr[1][0] = a.charAt(3)+"";
arr[1][1] = a.charAt(4)+"";
arr[1][2] = a.charAt(5)+"";
arr[2][0] = a.charAt(6)+"";
arr[2][1] = a.charAt(7)+"";
arr[2][2] = a.charAt(8)+"";
return arr;
}
public void Start(String data){
// Node current = root;
// while(current!=null){
// DO(current.data);
// if(current.data.equals("123456780")){
// System.out.println("END");
// break;
// }
// else if(current.data.compareTo(data) > 0){
// current = current.left;
// }else{
// current = current.right;
// }
// }
while(cout <1290000 && count1 < 1290000)
{
if(root == null) return;
Queue<Node> queue = new ArrayDeque<Node>();
queue.add(root);
while(!queue.isEmpty()){
Node current = queue.peek();
DO(current.data);
cout++;
if(current.data.equals("123456780")){
// System.out.println("END");
cout = count1 = 1290000000;
break;
}
if (current.left != null)
queue.add(current.left);
if (current.right != null){
queue.add(current.right);
}
queue.poll();
}
}
// System.out.println(cout +" : and : "+count1);
}
public void parent(String id){
Node current = root;
ArrayList<String> arr = new ArrayList<>();
while(current!=null){
arr.add(current.data);
if(current.data.equals(id)){
current = null;
}else if(current.data.compareTo(id) > 0){
current = current.left;
arr.add("/");
}else{
current = current.right;
arr.add("\\");
}
}
//////// FILE
String b = " ";
for (int i = 0; i < arr.size(); i++) {
if(arr.get(i) == "\\" || arr.get(i) == "/")
System.out.print("\n"+" "+arr.get(i));
else
for (int j = 0; j < arr.get(i).length(); j++) {
if(j%3 == 0)
{
System.out.println();
System.out.print(" ");
}
System.out.print("["+arr.get(i).charAt(j)+"]");
}
}
System.out.print("\n"+" Deep from root to goal : "+arr.size()/2);
}
// public boolean delete(String id){
// Node parent = root;
// Node current = root;
// boolean isLeftChild = false;
// while(current.data.compareTo(id) != 0){
// parent = current;
// if(current.data.compareTo(id) > 0){
// isLeftChild = true;
// current = current.left;
// }else{
// isLeftChild = false;
// current = current.right;
// }
// if(current ==null){
// return false;
// }
// }
// //if i am here that means we have found the node
// //Case 1: if node to be deleted has no children
// if(current.left==null && current.right==null){
// if(current==root){
// root = null;
// }
// if(isLeftChild ==true){
// parent.left = null;
// }else{
// parent.right = null;
// }
// }
// //Case 2 : if node to be deleted has only one child
// else if(current.right==null){
// if(current==root){
// root = current.left;
// }else if(isLeftChild){
// parent.left = current.left;
// }else{
// parent.right = current.left;
// }
// }
// else if(current.left==null){
// if(current==root){
// root = current.right;
// }else if(isLeftChild){
// parent.left = current.right;
// }else{
// parent.right = current.right;
// }
// }else if(current.left!=null && current.right!=null){
//
// //now we have found the minimum element in the right sub tree
// Node successor = getSuccessor(current);
// if(current==root){
// root = successor;
// }else if(isLeftChild){
// parent.left = successor;
// }else{
// parent.right = successor;
// }
// successor.left = current.left;
// }
// return true;
// }
//
// public Node getSuccessor(Node deleleNode){
// Node successsor =null;
// Node successsorParent =null;
// Node current = deleleNode.right;
// while(current!=null){
// successsorParent = successsor;
// successsor = current;
// current = current.left;
// }
// //check if successor has the right child, it cannot have left child for sure
// // if it does have the right child, add it to the left of successorParent.
//// successsorParent
// if(successsor!=deleleNode.right){
// successsorParent.left = successsor.right;
// successsor.right = deleleNode.right;
// }
// return successsor;
// }
public void insert(String id){
Node newNode = new Node(id);
if(root==null){
root = newNode;
return;
}
Node current = root;
Node parent = null;
while(true){
parent = current;
if(id.compareTo(current.data) < 0){
current = current.left;
if(current==null){
parent.left = newNode;
return;
}
}else{
current = current.right;
if(current==null){
parent.right = newNode;
return;
}
}
}
}
public void display(Node root){
// if(root!=null){
// display(root.left);
// System.out.print(" " + root.data);
// System.out.println();
// display(root.right);
// }
if(root == null) return;
Queue<Node> queue = new ArrayDeque<Node>();
queue.add(root);
try(BufferedWriter writer = new BufferedWriter(new FileWriter("C:/Users/Ali/Desktop/a.txt"))){
while(!queue.isEmpty()){
Node current = queue.peek();
writer.write("["+current.data+"]");
if (current.left != null)
queue.add(current.left);
if (current.right != null){
queue.add(current.right);
}
queue.poll();
}
}
catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String arg[]){
Scanner in = new Scanner(System.in);
BinarySearchTree b = new BinarySearchTree();
System.out.println("Pleas Enter Your Pazzle Numbers :");
String input = in.next();
b.insert(input);//023156478 <--in test shde 876543210 234516780 305248167 846712305 013725846 123450678 876543210 230456178
double startTime = System.currentTimeMillis();
b.Start(b.root.data);
b.display(b.root);
System.out.println(" PARENTS OF : 123456780 TIL : "+input);
b.parent("123456780");
double endTime = System.currentTimeMillis();
double totalTime = (endTime - startTime)/1000;
System.out.println("\n This Is Total Processed Time : "+totalTime);
}
}
class Node{
String data;
Node left;
Node right;
public Node(String data){
this.data = data;
left = null;
right = null;
}
}
راستی استاد گفته بهتر بود از آ* استفاده میکردی منم نمیدونستم چیه ! الانم که فک نکنم بشه عوضش کرد