#include <bits/stdc++.h> using namespace std; struct butelki{ int a,b,c,kroki; }; bool operator < (butelki a,butelki b){ if(a.kroki>b.kroki) return 1; return 0; }; priority_queue <butelki> kol; butelki start,a,pom; set <pair<int,int>> s; int aw,bw,cw,prze; int odp[100001]; int main() { scanf("%d %d %d",&aw,&bw,&cw); scanf("%d %d %d",&start.a,&start.b,&start.c); start.kroki=0; kol.push(start); for(int i=0;i<=cw;i++){ odp[i]=1000000000; } while(kol.empty()==0){ a=kol.top(); kol.pop(); if(s.count(make_pair(a.a,a.b))==0){ s.insert(make_pair(a.a,a.b)); odp[a.a]=min(odp[a.a],a.kroki); odp[a.b]=min(odp[a.b],a.kroki); odp[a.c]=min(odp[a.c],a.kroki); prze=min(a.a,bw-a.b); pom.kroki=a.kroki+1; pom.a=a.a-prze; pom.b=a.b+prze; pom.c=a.c; kol.push(pom); prze=min(a.a,cw-a.c); pom.a=a.a-prze; pom.c=a.c+prze; pom.b=a.b; kol.push(pom); prze=min(a.b,aw-a.a); pom.a=a.a+prze; pom.b=a.b-prze; pom.c=a.c; kol.push(pom); prze=min(a.b,cw-a.c); pom.a=a.a; pom.b=a.b-prze; pom.c=a.c+prze; kol.push(pom); prze=min(a.c,aw-a.a); pom.a=a.a+prze; pom.b=a.b; pom.c=a.c-prze; kol.push(pom); prze=min(a.c,bw-a.b); pom.a=a.a; pom.b=a.b+prze; pom.c=a.c-prze; kol.push(pom); } } for(int i=0;i<=cw;i++){ if(odp[i]==1000000000){ printf("-1 "); }else{ printf("%d ",odp[i]); } } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <bits/stdc++.h> using namespace std; struct butelki{ int a,b,c,kroki; }; bool operator < (butelki a,butelki b){ if(a.kroki>b.kroki) return 1; return 0; }; priority_queue <butelki> kol; butelki start,a,pom; set <pair<int,int>> s; int aw,bw,cw,prze; int odp[100001]; int main() { scanf("%d %d %d",&aw,&bw,&cw); scanf("%d %d %d",&start.a,&start.b,&start.c); start.kroki=0; kol.push(start); for(int i=0;i<=cw;i++){ odp[i]=1000000000; } while(kol.empty()==0){ a=kol.top(); kol.pop(); if(s.count(make_pair(a.a,a.b))==0){ s.insert(make_pair(a.a,a.b)); odp[a.a]=min(odp[a.a],a.kroki); odp[a.b]=min(odp[a.b],a.kroki); odp[a.c]=min(odp[a.c],a.kroki); prze=min(a.a,bw-a.b); pom.kroki=a.kroki+1; pom.a=a.a-prze; pom.b=a.b+prze; pom.c=a.c; kol.push(pom); prze=min(a.a,cw-a.c); pom.a=a.a-prze; pom.c=a.c+prze; pom.b=a.b; kol.push(pom); prze=min(a.b,aw-a.a); pom.a=a.a+prze; pom.b=a.b-prze; pom.c=a.c; kol.push(pom); prze=min(a.b,cw-a.c); pom.a=a.a; pom.b=a.b-prze; pom.c=a.c+prze; kol.push(pom); prze=min(a.c,aw-a.a); pom.a=a.a+prze; pom.b=a.b; pom.c=a.c-prze; kol.push(pom); prze=min(a.c,bw-a.b); pom.a=a.a; pom.b=a.b+prze; pom.c=a.c-prze; kol.push(pom); } } for(int i=0;i<=cw;i++){ if(odp[i]==1000000000){ printf("-1 "); }else{ printf("%d ",odp[i]); } } return 0; } |