#include <bits/stdc++.h> using namespace std; //#define int long long #define st first #define nd second #define bg begin #define ed end #define pb push_back #define all(r) bg(r),ed(r) #define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0) struct pos{ int a; int b; int c; }; int32_t main(){ fast; map<array<int,3>,bool>used; map<array<int,3>,int>d; array<int,3> ma; array<int,3> pocz; cin>>ma[0]>>ma[1]>>ma[2]>>pocz[0]>>pocz[1]>>pocz[2]; queue<array<int,3>>q; vector<int>res(ma[2]+1,INT_MAX); q.push(pocz); used[pocz]=1; d[pocz]=0; res[pocz[0]]=0; res[pocz[1]]=0; res[pocz[2]]=0; while(!q.empty()){ array<int,3> v=q.front(); q.pop(); for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ if(i!=j){ array<int,3> ne=v; if(v[i]+v[j]>ma[j]){ ne[i]=v[i]-(ma[j]-v[j]); ne[j]=ma[j]; }else{ ne[i]=0; ne[j]=v[i]+v[j]; } if(!used[ne]){ q.push(ne); used[ne]=1; int k=d[v]; //cout<<ne[0]<<' '<<ne[1]<<' '<<ne[2]<<' '<<k+1<<'\n'; d[ne]=k+1; res[ne[0]]=min(res[ne[0]],k+1); res[ne[1]]=min(res[ne[1]],k+1); res[ne[2]]=min(res[ne[2]],k+1); } } } } } for(auto z:res){ if(z!=INT_MAX){ cout<<z<<' '; }else{ cout<<-1<<' '; } } }
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 | #include <bits/stdc++.h> using namespace std; //#define int long long #define st first #define nd second #define bg begin #define ed end #define pb push_back #define all(r) bg(r),ed(r) #define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0) struct pos{ int a; int b; int c; }; int32_t main(){ fast; map<array<int,3>,bool>used; map<array<int,3>,int>d; array<int,3> ma; array<int,3> pocz; cin>>ma[0]>>ma[1]>>ma[2]>>pocz[0]>>pocz[1]>>pocz[2]; queue<array<int,3>>q; vector<int>res(ma[2]+1,INT_MAX); q.push(pocz); used[pocz]=1; d[pocz]=0; res[pocz[0]]=0; res[pocz[1]]=0; res[pocz[2]]=0; while(!q.empty()){ array<int,3> v=q.front(); q.pop(); for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ if(i!=j){ array<int,3> ne=v; if(v[i]+v[j]>ma[j]){ ne[i]=v[i]-(ma[j]-v[j]); ne[j]=ma[j]; }else{ ne[i]=0; ne[j]=v[i]+v[j]; } if(!used[ne]){ q.push(ne); used[ne]=1; int k=d[v]; //cout<<ne[0]<<' '<<ne[1]<<' '<<ne[2]<<' '<<k+1<<'\n'; d[ne]=k+1; res[ne[0]]=min(res[ne[0]],k+1); res[ne[1]]=min(res[ne[1]],k+1); res[ne[2]]=min(res[ne[2]],k+1); } } } } } for(auto z:res){ if(z!=INT_MAX){ cout<<z<<' '; }else{ cout<<-1<<' '; } } } |