Algoritmo de fuerza bruta para resolver problemas (lenguaje c)


prefacio

Resuelve los siguientes problemas:
1. Solución de fuerza bruta al problema de la mochila
[Descripción del problema] Hay n elementos con pesos {w1, w2, ..., wn}, y sus valores son {v1, v2, ... , vn}, Dada una mochila de capacidad W. Diseñe un plan para seleccionar algunos elementos de estos elementos y ponerlos en la mochila. Cada elemento se selecciona o no se selecciona. Se requiere que los elementos seleccionados no solo puedan colocarse en la mochila, sino que también tengan el mayor valor. .
  Encuentre todas las soluciones y la mejor solución cuando W=6 para los 4 elementos que se muestran en la siguiente tabla.
Artículo No. Peso Valor

1. Procedimientos y resultados experimentales

#include<stdio.h>
int V[100][100];
int max(int a,int b)
{
    
    
   if(a>=b)
       return a;
   else return b;
}
 
int foolish(int n,int w[],int v[],int x[],int C)
{
    
    
    int i,j;
    for(i=0;i<=n;i++)
        V[i][0]=0;
    for(j=0;j<=C;j++)
        V[0][j]=0;
	printf("序号 质量 价值  \n",i,w[i-1],v[i-1]);
    for(i=1;i<=n;i++)
	{
    
    
		printf("  %d    %d    %d  ",i,w[i-1],v[i-1]);
        for(j=1;j<=C;j++)
		{
    
    
            if(j<w[i-1])
			{
    
    
				V[i][j]=V[i-1][j];
				printf("[%d][%d]=%2d  ",i,j,V[i][j]);
			}
			
            else
			{
    
    
                V[i][j]=max(V[i-1][j],V[i-1][j-w[i-1]]+v[i-1]);
				printf("[%d][%d]=%2d  ",i,j,V[i][j]);
			}
		}
		printf("\n");
	}
            j=C;
            for(i=n;i>=1;i--)
            {
    
    
            if(V[i][j]>V[i-1][j])
                {
    
    
					x[i]=1;
					j=j-w[i-1];
                }
            else
                x[i]=0;
            }
            printf("选中的物品是:\n");
            for(i=1;i<=n;i++){
    
    
				if(x[i]==1){
    
    
					printf("第%d个被选择\n",i);
				}
				else{
    
    
					printf("第%d个不被选择\n",i);
				}
			}   
            
        return V[n][C];
        
}
 
void main()
{
    
    
    int s;
    int w[100];
    int v[100];
    int x[100];
    int n,i;
    int C;
    n=5;
    printf("请输入背包的最大容量:\n");
    scanf("%d",&C);
    printf("输入物品数:\n");
    scanf("%d",&n);
    printf("请分别输入物品的重量:\n");
    for(i=0;i<n;i++){
    
    
		printf("\n请输入第%d个物品重量: ",i+1);
        scanf("%d",&w[i]);
	}
    printf("\n请分别输入物品的价值:\n");
    for(i=0;i<n;i++){
    
    
        printf("\n请输入第%d个物品价值: ",i+1);
		scanf("%d",&v[i]);
    }
    s=foolish(n,w,v,x,C);
    printf("此时最大物品价值为:\n");
    printf("%d\n",s);
   }

Resultados experimentales:
inserte la descripción de la imagen aquí
Emmm, la fuerza bruta a veces puede resolver problemas muy bien, pero esto debe ser cuando tienes prisa, de lo contrario, puedes elegir un método mejor para resolverlo.

Supongo que te gusta

Origin blog.csdn.net/weixin_51759592/article/details/125782703
Recomendado
Clasificación