背包问题
#include<stdio.h>
double knapSack(int w[],int v[],int n ,int c){
double x[n]={0},maxValue=0;
int i;
for(0;w[i]<c;i++)
{
x[i]=1;
maxValue+=v[i];
c=c-w[i];
}
x[i]=(double)c/w[i];
maxValue+=x[i]*v[i];
return maxValue;
}
int main(void){
int w[6]={1,4,5,6,8,7};
int v[6]={10,5,6,2,6,7};
int m=knapSack(w,v,6,6);
printf("\n最大价值为%d",m);
}
着色问题:
#include<stdio.h>
int ColorGraph(int arc[100][100],int n,int color[]){
int i,j,k=0,flag=1;
while(flag==1)
{
k++;flag=0;
for(i=0;i<n;i++){
if(color[i]!=0) continue;
color[i]=k;
for(j=0;j<n;j++)
if(arc[i][j]==1&&color[i]==color[j]) break;
if(j<n)
{
color[i]=0;flag=1;
}
}
}
return k;
}
int main(void){
int arr[100][100];
arr[0][1]=1;
arr[1][2]=1;
arr[1][3]=1;
arr[2][4]=1;
arr[3][4]=1;
int color[5]={0};
printf("邻接矩阵为:\n");
for(int i=0;i<5;i++){
for(int j =0;j<5;j++){
if(arr[i][j]!=0) arr[j][i]=1;
printf("%-5d",arr[i][j]);
if(j==4){
printf("%\n");
}
}
}
int k=ColorGraph(arr,5,color);
printf("涂的颜色分别为: \n") ;
for(int j=0;j<5;j++){
printf("%-5d ",color[j]);
}
printf("\n用了 %d 种颜色",k);
}