Skip to main content

Knapsack Using Backtracking in C Programming


#include < stdio.h>
#include < conio.h>
#define MAX 20
float final_profit;
int w[MAX];
int p[MAX];
int n,m;
int temp[MAX],x[MAX];
float final_wt;

float Bound_Calculation(int,int,int);
void BackTracking(int,int,int);

void main()
{
 int i;
 clrscr();
 printf("\n-------------------------------------------------------");
 printf("\n     KNAPSACK PROBLEM USING BACKTRACKING");
 printf("\n-------------------------------------------------------");
 printf("\n Enter number of Objects you want:");
 scanf("%d",&n);
 printf("\n-------------------------------------------------------");
 for(i=1;i < =n;i++)
 {
  printf("\n Enter Weight and value for object%d:",i);
  scanf("%3d %3d",&w[i],&p[i]);
 }
 printf("\n Enter Capacity of Knapsack:");
 scanf("%d",&m);
 getch();
 printf("\n-------------------------------------------------------");
 printf("\n Weight\tProfit");
 printf("\n-------------------------------------------------------");

 for(i=1;i < =n;i++)
 {
  printf("\n %d \t %d",w[i],p[i]); 
 }
 
 BackTracking(1,0,0);
 
 printf("\n-------------------------------------------------------");
 printf("\n Following Objects are included:");
 printf("\n-------------------------------------------------------");
 for(i=1;i < =n;i++)
 {
  if(x[i]==1)
   printf("\n%d",i);
 }
 printf("\n-------------------------------------------------------");
 printf("\n Final Weight:%0.2f",final_wt);
 printf("\n Final Profit:%0.2f",final_profit);
getch();
}
float Bound_Calculation(int cp,int cw,int k)
{
 int ub,c,i;
 ub=cp;
 c=cw;
 for(i=k+1;i < =n;i++)
 {
  c=c+w[i];
  if(c < m)
   ub=ub+p[i];
  else
   return (ub+(1-(c-m)/w[i])*p[i]);
 }
 return ub;
}
void BackTracking(int k,int cp,int cw)
{
 int new_k,new_cp,new_cw,j;
 if(cw+w[k] < =m)
 {
  temp[k]=1;
  if(k < n)
  {
   new_k=k+1;
   new_cp=cp+p[k];
   new_cw=cw+w[k];
   BackTracking(new_k,new_cp,new_cw);
  }
  if((new_cp>final_profit)&&(k==n))
  {
   final_profit=new_cp;
   final_wt=new_cw;
   for(j=1;j < =k;j++)
   {
    x[j]=temp[j];
   }
  }
 }
 
 if(Bound_Calculation(cp,cw,k)>=final_profit)
 {
  temp[k]=0;
  if(k < n)
   BackTracking(k+1,cp,cw);
  if((cp>final_profit)&&(k==n))
  {
   final_profit=cp;
   final_wt=cw;
   for(j=1;j < =n;j++)
    x[j]=temp[j];
  }
 }
}
OUTPUT

-------------------------------------------------------
     KNAPSACK PROBLEM USING BACKTRACKING
-------------------------------------------------------
 Enter number of Objects you want:4

-------------------------------------------------------
 Enter Weight and value for object1:5 6

 Enter Weight and value for object2:6 8

 Enter Weight and value for object3:7 12

 Enter Weight and value for object4:8 15

 Enter Capacity of Knapsack:13

-------------------------------------------------------
 Weight Profit
-------------------------------------------------------
 5       6
 6       8
 7       12
 8       15
-------------------------------------------------------
 Following Objects are included:
-------------------------------------------------------
2
3
-------------------------------------------------------
 Final Weight:13.00
 Final Profit:20.00

Comments

Post a Comment

Popular posts from this blog

MVT (Multiprogramming Variable Task) in C Programming

#include #include void main() { int i,os_m,nPage,total,pg[25]; clrscr(); printf("\nEnter total memory size:"); scanf("%d",&total); printf("\nEnter memory for OS:"); scanf("%d",&os_m); printf("\nEnter no. of pages:"); scanf("%d",&nPage); for(i=0;i =pg[i]) { printf("\n Allocate page %d",i+1); total=total-pg[i]; } else printf("\n page %d is not allocated due to insufficient memory.",i+1); } printf("\n External Fragmentation is:%d",total); getch(); } OUTPUT Enter total memory size:1024 Enter memory for OS:256 Enter no. of pages:4 Enter size of page[1]:128 Enter size of page[2]:512 Enter size of page[3]:64 Enter size of page[4]:512 Allocate page 1 Allocate page 2 Allocate page 3 page 4 is not allocated due to insufficient memory. External Fragmentation is:64

First Come First Serve (FCFS) Page replacement algorithm in C Programming

#include #include int fsize; int frm[15]; void display(); void main() { int pg[100],nPage,i,j,pf=0,top=-1,temp,flag=0; clrscr(); printf("\n Enter frame size:"); scanf("%d",&fsize); printf("\n Enter number of pages:"); scanf("%d",&nPage); for(i=0;i OUTPUT Enter frame size:3 Enter number of pages:12 Enter page[1]:1 Enter page[2]:2 Enter page[3]:3 Enter page[4]:4 Enter page[5]:1 Enter page[6]:2 Enter page[7]:5 Enter page[8]:1 Enter page[9]:2 Enter page[10]:3 Enter page[11]:4 Enter page[12]:5 page | Frame content -------------------------------------- 1 | 1 -1 -1 2 | 1 2 -1 3 | 1 2 3 4 | 4 2 3 1 | 4 1 3 2 | 4 1 2 5 | 5 1 2 1 | 5 1 2 2 | 5 1 2 3 | 5 3 2 4 | 5 3 4 5 | 5 3 4 ---------------------------...

Deadlock Prevention using Banker’s Algorithm in C Programming

#include #include void main() { int allocated[15][15],max[15][15],need[15][15],avail[15],tres[15],work[15],flag[15]; int pno,rno,i,j,prc,count,t,total; count=0; clrscr(); printf("\n Enter number of process:"); scanf("%d",&pno); printf("\n Enter number of resources:"); scanf("%d",&rno); for(i=1;i OUTPUT Enter number of process:5 Enter number of resources:3 Enter total numbers of each resources:10 5 7 Enter Max resources for each process: for process 1:7 5 3 for process 2:3 2 2 for process 3:9 0 2 for process 4:2 2 2 for process 5:4 3 3 Enter allocated resources for each process: for process 1:0 1 0 for process 2:3 0 2 for process 3:3 0 2 for process 4:2 1 1 for process 5:0 0 2 available resources: 2 3 0 Allocated matrix Max need 0 1 0| 7 5 3| 7 4 3 3 0 2| 3 2 2| 0 2 0 3 0 2| 9 0 2| 6 0 0 2 1 1| ...