Saturday, October 3, 2015

Posted in My Programming Skill

Hill Climbing Algorithm

import java.util.*;
class Node {
       int no
       String name;
       Node left, right;
       boolean hasleft, hasright;
       float Hn;
}
public class Hill {
       public static void main(String args[]) {
              Scanner sc = new Scanner(System.in);
              LinkedList open = new LinkedList();
              LinkedList close = new LinkedList();
              LinkedList demo = new LinkedList();
              LinkedList track = new LinkedList();
              int n, i, k, temp2;
              String goal, ch, temp1;
              float temp;
              System.out.println("Enter number of nodes:");
              n = sc.nextInt();
              Node nd[] = new Node[n];
              for(i=0, k=0;i<n-1;k++) {
                     if(i==0) {
                           nd[i] = new Node();
                           nd[i].no = i;
                           System.out.println("Enter ROOT node");
                           nd[i].name = sc.next();
                           System.out.println("Enter h("+nd[i].name+"): ");
                           nd[i].Hn = sc.nextFloat();
                     }
                     System.out.println(nd[k].name + " Has Left Child? (y/n)");
                     ch = sc.next();
                     if(ch.charAt(0)=='y' || ch.charAt(0)=='Y') {
                           i++;
                           nd[i] = new Node();
                           nd[i].no = i;
                           System.out.println("Enter Child nodes:");
                           nd[i].name = sc.next();
                           System.out.println("Enter h("+nd[i].name+"): ");
                           nd[i].Hn = sc.nextFloat();
                           nd[k].left = nd[i];
                           nd[k].hasleft = true;
                     }
                     System.out.println(nd[k].name + " Has Right Child? (y/n)");
                           ch = sc.next();
                           if(ch.charAt(0)=='y' || ch.charAt(0)=='Y') {
                                  i++;
                                  nd[i] = new Node();
                                  nd[i].no = i;
                                  System.out.println("Enter Child nodes:");
                                  nd[i].name = sc.next();
                                  System.out.println("Enter h("+nd[i].name+"): ");
                                  nd[i].Hn = sc.nextFloat();
                                  nd[k].right = nd[i];
                                  nd[k].hasright = true;
                           }
              }
              System.out.println("Enter Goal State:");
              goal = sc.next();
              for(i=0;i<n;i++) {
                           if(i==0) {
                     open.add(nd[i].name);
                     track.add(nd[i].no);
                     demo.add(nd[i].Hn);
                     }
                     System.out.println((i+1)+".\n"+ "OPEN: "+open+"\t\t X = "+open.getFirst()+"\nCLOSE: "+close);
                     if(goal.equals(open.getFirst())) {
                     System.out.println("GOAL STATE "+open.getFirst()+" found");
                           break;
                     }
                     else {
                           close.add(open.getFirst());
                           open.removeFirst();
                           demo.removeFirst();
                           int g = (int)track.getFirst();
                           track.removeFirst();
                           if(nd[g].hasleft==true && nd[g].hasright==true) {
                           open.add(nd[g].left.name);open.add(nd[g].right.name);
                                  demo.add(nd[g].left.Hn);demo.add(nd[g].right.Hn);
                                  track.add(nd[g].left.no);track.add(nd[g].right.no);                         int tr[] = new int[track.size()];
                     float[] array = new float[demo.size()];
                     String[] arr = new String[open.size()];
                     for(k=0;k<2;k++) {
                           array[k] = (float) demo.get(k);
                           arr[k] = (String) open.get(k);
                           tr[k] = (int) track.get(k);
                     }
                     if(array[0]<array[1]) {
                     temp = array[0];
                     temp1 = arr[0];
                     temp2 = tr[0];
                     array[0] = array[1];
                     arr[0] = arr[1];
                     tr[0] = tr[1];
                     array[1] = temp;
                     arr[1] = temp1;
                     tr[1] = temp2;
              }
              open.removeFirst();open.removeFirst();
              demo.removeFirst();demo.removeFirst();
              track.removeFirst();track.removeFirst();
              for(k=0;k<2;k++) {
                     open.add(k, arr[k]);
                     demo.add(k, array[k]);
                     track.add(k, tr[k]); }
                     }                   
              else if(nd[g].hasleft==true && nd[g].hasright==false) {
open.add(0, nd[g].left.name);demo.add(0, nd[g].left.Hn);track.add(0, nd[g].left.no);
              }
              else if(nd[g].hasleft==false && nd[g].hasright==true) {
open.add(0, nd[g].right.name);demo.add(0, nd[g].right.Hn);track.add(0, nd[g].right.no);
              }
       }
}
if(open.isEmpty()==true) {
System.out.println((i+1)+".\n"+ "OPEN: "+open+"\nCLOSE: "+close);
              System.out.println("Goal State not found");
              }
       }
}

OUTPUT:
Enter number of nodes:
6
Enter ROOT node
A
Enter h(A):
10
A Has Left Child? (y/n)
y
Enter Child nodes:
B
Enter h(B):
9
A Has Right Child? (y/n)
y
Enter Child nodes:
C
Enter h(C):
11
B Has Left Child? (y/n)
y
Enter Child nodes:
D
Enter h(D):
7
B Has Right Child? (y/n)
y
Enter Child nodes:
E
Enter h(E):
9
C Has Left Child? (y/n)
y
Enter Child nodes:
F
Enter h(F):
5
C Has Right Child? (y/n)
n
Enter Goal State:
E
1.
OPEN: [A]            X = A
CLOSE: []
2.
OPEN: [C, B]         X = C
CLOSE: [A]
3.
OPEN: [F, B]         X = F
CLOSE: [A, C]
4.
OPEN: [B]            X = B
CLOSE: [A, C, F]
5.
OPEN: [E, D]         X = E
CLOSE: [A, C, F, B]
GOAL STATE E found


Enter number of nodes:
3
Enter ROOT node
A
Enter h(A):
10
A Has Left Child? (y/n)
y
Enter Child nodes:
B
Enter h(B):
5
A Has Right Child? (y/n)
y
Enter Child nodes:
C
Enter h(C):
8
Enter Goal State:
D
1.
OPEN: [A]            X = A
CLOSE: []
2.
OPEN: [C, B]         X = C
CLOSE: [A]
3.
OPEN: [B]            X = B
CLOSE: [A, C]
4.
OPEN: []
CLOSE: [A, C, B]
Goal State not found


Posted in My Programming Skill

BFS - Best First Search

import java.util.*;
class Node {
       int no;
       String name;
       Node left, right;
       boolean hasleft, hasright;
       float Hn, Gn, Fn;
}
public class BEST {
       public static void main(String args[]) {
              Scanner sc = new Scanner(System.in);
              LinkedList open = new LinkedList();
              LinkedList close = new LinkedList();
              LinkedList demo = new LinkedList();
              LinkedList track = new LinkedList();
              int n, i, k, j, temp2;
              String goal, ch;
              float temp;
              String temp1;
              System.out.println("Enter number of nodes:");
              n = sc.nextInt();
              Node nd[] = new Node[n];
              for(i=0, k=0;i<n-1;k++) {
                     if(i==0) {
                           nd[i] = new Node();
                           nd[i].no = i;
                           System.out.println("Enter ROOT node");
                           nd[i].name = sc.next();
                           System.out.println("Enter h("+nd[i].name+"): ");
                           nd[i].Hn = sc.nextFloat();
                     }
                     System.out.println(nd[k].name + " Has Left Child? (y/n)");
                     ch = sc.next();
                     if(ch.charAt(0)=='y' || ch.charAt(0)=='Y') {
                           i++;
                           nd[i] = new Node();
                           nd[i].no = i;
                           System.out.println("Enter Child nodes:");
                           nd[i].name = sc.next();
                           System.out.println("Enter h("+nd[i].name+"): ");
                           nd[i].Hn = sc.nextFloat();
                           nd[k].left = nd[i];
                           nd[k].hasleft = true;
                     }
                     System.out.println(nd[k].name + " Has Right Child? (y/n)");
                           ch = sc.next();
                           if(ch.charAt(0)=='y' || ch.charAt(0)=='Y') {
                                  i++;
                                  nd[i] = new Node();
                                  nd[i].no = i;
                                  System.out.println("Enter Child nodes:");
                                  nd[i].name = sc.next();
                                  System.out.println("Enter h("+nd[i].name+"): ");
                                  nd[i].Hn = sc.nextFloat();
                                  nd[k].right = nd[i];
                                  nd[k].hasright = true;
                           }}
              System.out.println("Enter Goal State:");
              goal = sc.next();
              for(i=0;i<n;i++) {
                           if(i==0) {
                     open.add(nd[i].name);track.add(nd[i].no);demo.add(nd[i].Hn);
                     }
                     System.out.println((i+1)+".\n"+ "OPEN: "+open+"\t\t X = "+open.getFirst()+"\nCLOSE: "+close);
                     if(goal.equals(open.getFirst())) {
                     System.out.println("GOAL STATE "+open.getFirst()+" found");
                           break;
                     }
                     else {
                           close.add(open.getFirst());
                           open.removeFirst();  demo.removeFirst();
                           int g = (int)track.getFirst();
                           track.removeFirst();
                           if(nd[g].hasleft==true && nd[g].hasright==true) {
                           open.add(nd[g].left.name);open.add(nd[g].right.name);
                                  demo.add(nd[g].left.Hn);demo.add(nd[g].right.Hn);
                                  track.add(nd[g].left.no);track.add(nd[g].right.no);
                           }
                           else if(nd[g].hasleft==true && nd[g].hasright==false) {
open.add(nd[g].left.name);demo.add(nd[g].left.Hn);track.add(nd[g].left.no);
                           }
                           else if(nd[g].hasleft==false && nd[g].hasright==true) {
       open.add(nd[g].right.name);demo.add(nd[g].right.Hn);track.add(nd[g].right.no);
                           }}
                     if(open.size()>1 &&track.size()>1 &&demo.size()>1) {
                           int tr[] = new int[track.size()];
                           float[] array = new float[demo.size()];
                           String[] arr = new String[open.size()];
                           for(k=0;k<demo.size();k++) {
                                  array[k] = (float) demo.get(k);
                                  arr[k] = (String) open.get(k);
                                  tr[k] = (int) track.get(k);
                           }
                           for(int z=0;z<array.length;z++) {
                                  for(j=z+1;j<array.length;j++) {
                                         if(array[z]>array[j]) {
                                                temp = array[z];
                                                temp1 = arr[z];
                                                temp2 = tr[z];
                                                array[z] = array[j];
                                                arr[z] = arr[j];
                                                tr[z] = tr[j];
                                                array[j] = temp;
                                                arr[j] = temp1;
                                                tr[j] = temp2;
                                         }}
                           }
                           open.clear(); demo.clear(); track.clear();
                           for(k=0;k<array.length;k++) {
                                  open.add(arr[k]);
                                  demo.add(array[k]);
                                  track.add(tr[k]); }
                           }}
              if(open.isEmpty()==true) {
                     System.out.println((i+1)+".\n"+ "OPEN: "+open+"\nCLOSE: "+close);
                     System.out.println("Goal State not found");
              }}
}
OUTPUT:
Enter number of nodes:
5
Enter ROOT node
A
Enter h(A):
1
A Has Left Child? (y/n)
y
Enter Child nodes:
B
Enter h(B):
3
A Has Right Child? (y/n)
y
Enter Child nodes:
C
Enter h(C):
2
B Has Left Child? (y/n)
y
Enter Child nodes:
D
Enter h(D):
5
B Has Right Child? (y/n)
y
Enter Child nodes:
E
Enter h(E):
4
Enter Goal State:
E
1.
OPEN: [A]            X = A
CLOSE: []
2.
OPEN: [C, B]         X = C
CLOSE: [A]
3.
OPEN: [B]            X = B
CLOSE: [A, C]
4.
OPEN: [E, D]         X = E
CLOSE: [A, C, B]

GOAL STATE E found
Posted in My Programming Skill

A* - A Star Algorithm

import java.util.*;
class Node {
int no;
       String name;
       Node left;
Node right;
       boolean hasleft;
boolean hasright;
float Hn, Gn, Fn;
}
public class Astar {
       public static void main(String args[]) {
              Scanner sc = new Scanner(System.in);
              LinkedList open = new LinkedList();
              LinkedList close = new LinkedList();
              LinkedList demo = new LinkedList();
              LinkedList track = new LinkedList();
              int n, i, k, j, temp2;
              String goal, ch, temp1;
              float temp;
              System.out.println("Enter number of nodes:");
              n = sc.nextInt();
              Node nd[] = new Node[n];
              for(i=0, k=0;i<n-1;k++) {
                     if(i==0) {
                           nd[i] = new Node();
                           System.out.println("Enter ROOT node");
                           nd[i].name = sc.next();
                           System.out.println("Enter h("+nd[i].name+"): ");
                           nd[i].Hn = sc.nextFloat();
                           nd[i].Gn = 0;
                           nd[i].no = i;
                           nd[i].Fn = nd[i].Hn + nd[i].Gn;
                     }
                     System.out.println(nd[k].name + " Has Left Child? (y/n)");
                     ch = sc.next();
                     if(ch.charAt(0)=='y' || ch.charAt(0)=='Y') {
                           i++;
                           nd[i] = new Node();
                           System.out.println("Enter Child nodes:");
                           nd[i].name = sc.next();
                           System.out.println("Enter h("+nd[i].name+"): ");
                           nd[i].Hn = sc.nextFloat();
                           System.out.println("Enter g("+nd[i].name+"): ");
                           nd[i].Gn = sc.nextFloat();
                           nd[i].no = i;
                           nd[i].Gn = nd[i].Gn + nd[k].Gn;
                           nd[i].Fn = nd[i].Hn + nd[i].Gn;
                           nd[k].left = nd[i];
                           nd[k].hasleft = true;
                     }
                     System.out.println(nd[k].name + " Has Right Child? (y/n)");
                           ch = sc.next();
                           if(ch.charAt(0)=='y' || ch.charAt(0)=='Y') {
                                  i++;
                                  nd[i] = new Node();
                                  System.out.println("Enter Child nodes:");
                                  nd[i].name = sc.next();
                                  System.out.println("Enter h("+nd[i].name+"): ");
                                  nd[i].Hn = sc.nextFloat();
                                  System.out.println("Enter g("+nd[i].name+"): ");
                                  nd[i].Gn = sc.nextFloat();
                                  nd[i].no = i;
                                  nd[i].Gn = nd[i].Gn + nd[k].Gn;
                                  nd[i].Fn = nd[i].Hn + nd[i].Gn;
                                  nd[k].right = nd[i];
                                  nd[k].hasright = true;
                           }
              }
              System.out.println("Enter Goal State:");
              goal = sc.next();
              for(i=0;i<n;i++) {
                     if(i==0) {
              open.add(nd[i].name);
track.add(nd[i].no);
demo.add(nd[i].Fn);
              }
              System.out.println((i+1)+".\n"+ "OPEN: "+open+"\t\t X = "+open.getFirst()+"\nCLOSE: "+close);
              if(goal.equals(open.getFirst())) {
                     System.out.println("GOAL STATE "+open.getFirst()+" found");
                     break;
              }
              else {
                     close.add(open.getFirst());
open.removeFirst();
demo.removeFirst();
                     int g = (int)track.getFirst();
                     track.removeFirst();
                     if(nd[g].hasleft==true && nd[g].hasright==true) {
                           open.add(nd[g].left.name);open.add(nd[g].right.name);
                           demo.add(nd[g].left.Fn);demo.add(nd[g].right.Fn);
                           track.add(nd[g].left.no);track.add(nd[g].right.no);
                     }
                     else if(nd[g].hasleft==true && nd[g].hasright==false) {              open.add(nd[g].left.name);demo.add(nd[g].left.Fn);track.add(nd[g].left.no);
                     }
                     else if(nd[g].hasleft==false && nd[g].hasright==true) {
       open.add(nd[g].right.name);demo.add(nd[g].right.Fn);track.add(nd[g].right.no);
                     }
              }
              if(open.size()>1 &&track.size()>1 &&demo.size()>1) {
                     inttr[] = new int[track.size()];
                     float[] array = new float[demo.size()];
                     String[] arr = new String[open.size()];
                     for(k=0;k<demo.size();k++) {
                           array[k] = (float) demo.get(k);
                           arr[k] = (String) open.get(k);
                           tr[k] = (int) track.get(k);
                     }
                     for(int z=0;z<array.length;z++) {
                           for(j=z+1;j<array.length;j++) {
                                  if(array[z]>array[j]) {
                                         temp = array[z];
                                         temp1 = arr[z];
                                         temp2 = tr[z];
                                         array[z] = array[j];
                                         arr[z] = arr[j];
                                         tr[z] = tr[j];
                                         array[j] = temp;
                                         arr[j] = temp1;
                                         tr[j] = temp2;
                                  }
                           }
                     }
                     open.clear();
demo.clear();
track.clear();
                     for(k=0;k<array.length;k++) {
open.add(arr[k]);
demo.add(array[k]);
track.add(tr[k]);
                           }
                     }
       }
       if(open.isEmpty()==true) {
              System.out.println((i+1)+".\n"+ "OPEN: "+open+"\nCLOSE: "+close);
              System.out.println("Goal State not found");
       }
}
}
OUTPUT:
Enter number of nodes:
5
Enter ROOT node
A
Enter h(A):
2
A Has Left Child? (y/n)
y
Enter Child nodes:
B
Enter h(B):
4
Enter g(B):
3
A Has Right Child? (y/n)
y
Enter Child nodes:
C
Enter h(C):
3
Enter g(C):
3
B Has Left Child? (y/n)
y
Enter Child nodes:
D
Enter h(D):
1
Enter g(D):
1
B Has Right Child? (y/n)
y
Enter Child nodes:
E
Enter h(E):
0
Enter g(E):
4
Enter Goal State:
E
1.
OPEN: [A]            X = A
CLOSE: []
2.
OPEN: [C, B]         X = C
CLOSE: [A]
3.
OPEN: [B]            X = B
CLOSE: [A, C]
4.
OPEN: [D, E]         X = D
CLOSE: [A, C, B]
5.
OPEN: [E]            X = E
CLOSE: [A, C, B, D]

GOAL STATE E found

    Translate

    Protected by Copyscape