Program to implement Knapsack problem

Objective: C program to solve knapsack problem using Greedy technique

Algorithm:
Step1: Start 
Step2: Declare the variable.
Step3: Using the get function read the number of items, capacity of the bag, Weight of the item and value of the items.
Step4: Find out the small weight with high value using the find function.
Step5: Find out the optimal solution using the function findop ().
Step6: Display the optimal solution for the items.
Step7: Stop 

				
					# include<stdio.h> 
void knapsack(int n, float weight[], float profit[], float capacity) 
{ 
float x[20], tp = 0; 
int i, j, u; 
u = capacity; 
for (i = 0; i < n; i++) 
x[i] = 0.0; 
for (i = 0; i < n; i++) 
{ 
if (weight[i] > u) 
break; 
else 
{ 
x[i] = 1.0; 
tp = tp + profit[i]; 
u = u - weight[i]; 
} 
} 
if (i < n) x[i] = u / weight[i]; 
tp = tp + (x[i] * profit[i]); 
printf("\nThe result vector is:- ");
for (i = 0; i < n; i++)
printf("%f\t", x[i]); 
printf("\nMaximum profit is:- %f", tp); 
} 
int main() 
{
float weight[20], profit[20], capacity; 
int num, i, j; 
float ratio[20], temp; 
printf("\nEnter the no. of objects:- "); 
scanf("%d", &num); 
printf("\nEnter the wts and profits of each object:- "); 
for (i = 0; i < num; i++) 
{ 
scanf("%f %f", &weight[i], &profit[i]); 
} 
printf("\nEnter the capacityacity of knapsack:- "); 
scanf("%f", &capacity); 
for (i = 0; i < num; i++) 
{ 
ratio[i] = profit[i] / weight[i]; 
}
for (i = 0; i < num; i++) 
{ 
for (j = i + 1; j < num; j++)
{
if (ratio[i] < ratio[j])
{ 
temp = ratio[j]; 
ratio[j] = ratio[i]; 
ratio[i] = temp; temp = 
weight[j]; weight[j] = 
weight[i]; weight[i] = temp; 
temp = profit[j]; 
profit[j] = profit[i]; 
profit[i] = temp; 
} 
} 
}
knapsack(num, weight, profit, capacity); 
getch(); 
return(0); 
}
				
			

Leave a Reply