Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class GreedyAlgorithm {
- public static void main(String[] args){
- Parcel A = new Parcel(2,20,24,'A');
- Parcel B = new Parcel(3,20,30,'B');
- Parcel C = new Parcel(Math.pow(1.5, 3),10,8,'C');
- char[][][] container = new char[33][5][8];
- for(int i=0; i<container.length; i++){
- for(int j=0; j<container[0][1].length; j++){
- for(int k=0; k<container[1].length; k++)
- container[i][k][j] = ' ';
- }
- }
- //Hardcoding of the different possible order
- if(A.RATIO > B.RATIO && B.RATIO > C.RATIO){
- Parcel[] allParcels1 = {A,B,C};
- load(container,allParcels1);
- }
- if(A.RATIO > C.RATIO && C.RATIO > B.RATIO){
- Parcel[] allParcels2 = {A,C,B};
- load(container,allParcels2);
- }
- if(B.RATIO > A.RATIO && A.RATIO > C.RATIO){
- Parcel[] allParcels3 = {B,A,C};
- load(container,allParcels3);
- }
- if(B.RATIO > C.RATIO && C.RATIO > A.RATIO){
- Parcel[] allParcels4 = {B,C,A};
- load(container,allParcels4);
- }
- if(C.RATIO > A.RATIO && A.RATIO > B.RATIO){
- Parcel[] allParcels5 = {C,A,B};
- load(container,allParcels5);
- }
- if(C.RATIO > B.RATIO && B.RATIO > A.RATIO){
- Parcel[] allParcels6 = {C,B,A};
- load(container,allParcels6);
- }
- printArray(container);
- getLoadInfo(container,A,B,C);
- System.out.println("Finished");
- }
- public static void load(char[][][] container, Parcel[] allParcels){
- //Try to place all piece with the best ratio first
- while(allParcels[0].quantity>0 && enoughSpace(container,allParcels[0])){
- for(int i=0; i<container.length; i++){
- for(int k=0; k<container[0][1].length; k++){
- for(int j=0; j<container[i].length; j++){
- if(allParcels[0].quantity>0){
- if(container[i][j][k] == ' '){
- if(itFits(container,allParcels[0],i,j,k)){
- drawParcel(container,allParcels[0],i,j,k);
- allParcels[0].quantity--;
- }
- }
- }
- }
- }
- }
- }
- //To avoid useless computation
- if(isFull(container))
- return;
- //second most valuable pieces and so on
- while(allParcels[1].quantity>0 && enoughSpace(container,allParcels[1])){
- for(int i=0; i<container.length; i++){
- for(int k=0; k<container[0][1].length; k++){
- for(int j=0; j<container[i].length; j++){
- if(allParcels[1].quantity>0){
- if(container[i][j][k] == ' '){
- if(itFits(container,allParcels[1],i,j,k)){
- drawParcel(container,allParcels[1],i,j,k);
- allParcels[1].quantity--;
- //printArray(container);
- }
- }
- }
- }
- }
- }
- }
- //To avoid useless computation
- if(isFull(container))
- return;
- while(allParcels[2].quantity>0 && enoughSpace(container,allParcels[2])){
- for(int i=0; i<container.length; i++){
- for(int k=0; k<container[0][1].length; k++){
- for(int j=0; j<container[i].length; j++){
- if(allParcels[2].quantity>0){
- if(container[i][j][k] == ' '){
- if(itFits(container,allParcels[2],i,j,k)){
- drawParcel(container,allParcels[2],i,j,k);
- allParcels[2].quantity--;
- }
- }
- }
- }
- }
- }
- }
- }
- public static boolean itFits(char[][][] container, Parcel parcel,int i, int j, int k){
- boolean enoughSpace = true;
- if(parcel.letter =='A'){
- for(int z=k; z<k+4;z++){
- for(int x=i; x<i+2; x++){
- for(int y=j; y<j+2; y++){
- if(x<container.length && y<container[0].length && z<container[0][1].length){
- if(container[x][y][z] != ' '){
- enoughSpace = false;
- return enoughSpace;
- }
- }
- else{
- enoughSpace = false;
- return enoughSpace;
- }
- }
- }
- }
- }
- if(parcel.letter =='B'){
- for(int z=k; z<k+4;z++){
- for(int x=i; x<i+2; x++){
- for(int y=j; y<j+3;y++){
- if(x<container.length && y<container[0].length && z< container[0][1].length){
- if(container[x][y][z] != ' '){
- enoughSpace = false;
- return enoughSpace;
- }
- }
- else{
- enoughSpace = false;
- return enoughSpace;
- }
- }
- }
- }
- }
- if(parcel.letter =='C'){
- for(int z=k; z<k+3;z++){
- for(int x=i; x<i+3; x++){
- for(int y=j; y<j+3;y++){
- if(x<container.length && y< container[0].length && z< container[0][1].length){
- if(container[x][y][z] != ' '){
- enoughSpace = false;
- return enoughSpace;
- }
- }
- else{
- enoughSpace = false;
- return enoughSpace;
- }
- }
- }
- }
- }
- return enoughSpace;
- }
- public static void drawParcel(char[][][] container, Parcel parcel,int i, int j, int k ){
- if(parcel.letter =='A'){
- for(int z=k; z<k+4;z++){
- for(int x=i; x<i+2; x++){
- for(int y=j; y<j+2;y++){
- if(x<container.length && y<container[0].length && z< container[0][1].length){
- container[x][y][z] = parcel.letter;
- }
- }
- }
- }
- }
- if(parcel.letter =='B'){
- for(int z=k; z<k+4;z++){
- for(int x=i; x<i+2; x++){
- for(int y=j; y<j+3;y++){
- container[x][y][z] = parcel.letter;
- }
- }
- }
- }
- if(parcel.letter =='C'){
- for(int z=k; z<k+3;z++){
- for(int x=i; x<i+3; x++){
- for(int y=j; y<j+3;y++){
- container[x][y][z] = parcel.letter;
- }
- }
- }
- }
- }
- public static boolean isFull(char[][][] container){
- for(int i=0; i<container.length; i++){
- for(int j=0; j<container[0][1].length; j++){
- for(int k=0; k<container[1].length; k++){
- if(container[i][k][j] == ' ')
- return false;
- }
- }
- }
- return true;
- }
- public static void printArray(char[][][] container){
- int counter=1;
- for(int k=0; k<container[0][1].length; k++){
- if(counter==1 && k==0)
- System.out.println("Layer : "+counter);
- for(int i=0; i<container.length; i++){
- for(int j=0; j<container[i].length; j++){
- System.out.print(container[i][j][k]);
- }
- System.out.println(" ");
- }
- System.out.println(" ");
- counter++;
- if(counter<9)
- System.out.println("LAYER : "+counter);
- }
- }
- public static boolean enoughSpace(char[][][] container,Parcel parcel){
- for(int i=0; i<container.length; i++){
- for(int k=0; k<container[0][1].length; k++){
- for(int j=0; j<container[i].length; j++){
- if(itFits(container,parcel,i,j,k)){
- return true;
- }
- }
- }
- }
- return false;
- }
- public static void getLoadInfo(char[][][] container, Parcel A, Parcel B, Parcel C){
- int numberA=0;
- int numberB=0;
- int numberC=0;
- int blankSpace=0;
- for(int i=0; i<container.length; i++){
- for(int k=0; k<container[0][1].length; k++){
- for(int j=0; j<container[i].length; j++){
- if(container[i][j][k] == 'A')
- numberA++;
- if(container[i][j][k] =='B')
- numberB++;
- if(container[i][j][k] =='C')
- numberC++;
- if(container[i][j][k] ==' ')
- blankSpace++;
- }
- }
- }
- numberA= numberA/16;
- numberB= numberB/24;
- numberC= numberC/27;
- double price = numberA*A.PRICE + numberB*B.PRICE + numberC*C.PRICE;
- System.out.println("Load value = "+price+" (A: "+numberA+" B: "+numberB+" C: "+numberC+" Space: "+blankSpace+")");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement