求用c语言编一道运输水的问题
发布网友
发布时间:2022-04-24 19:07
我来回答
共1个回答
热心网友
时间:2023-10-05 06:53
//有空就写了下
#include<stdio.h>
int main(){
int arr[3];//arr[0]表示A给D的次数,arr[1]表示A给B,arr[2]表示A给C的次数,A的总次数为 //60/15=4
intdis[3]={5,4,5};
inti,j,k,remain=4,ans=100,temp=0;
//A给B水或者不给
for(i=0;i<=3;i++){
arr[0]=i;
remain-=i;
if(i==0){//之所以和下面的情况区分 是为了防止A给B或者C的次数为4次
for(j=1;j<=3;j++){
arr[1]=j;
arr[2]=remain-j;
}
for(k=0;k<3;k++){
if(arr[k]!=0)
temp+=dis[k];
}
if(arr[0]==3||arr[2]==3) //说明C,D中有一个sink已经满了,所以B中断水只要全部
//给还没有满的就行了
temp+=3;
else
temp+=3*2; //说明C,D中都没满了
if(ans>temp)
ans=temp;
}
else{
for(j=0;j<=4-i;j++){
arr[1]=j;
arr[2]=remain-j;
}
for(k=0;k<3;k++){
if(arr[k]!=0)
temp+=dis[k];
}
if(arr[0]==3||arr[2]==3)
temp+=3;
else
temp+=3*2;
if(ans>temp)
ans=temp;
}
remain=4;//还原
temp=0;
}
//当然B也可以给A水 但这样明显路线更长 就不再重复一遍上面的过程了
printf("%d\n",ans);
return 0;
}追问实在不好意思忘了说明,这个题a水源和b水源只能有60加仑和30加仑,不能多了。所以60加仑水源的a是不能再加水的。