Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- findpath[aset_, Mset_] :=
- Module[{mM, amax = Max[aset], f, path, adouble, adouble2, aremo,
- anext, mnext, mprime, tpath, k, parsum, ai, t},
- If[Length[Mset] == 0, Print["case 0"]; path = aset;,
- mM = Min[Mset];
- f = Length[Select[Mset, # < amax &]];
- If[f > 0,
- If[MemberQ[Mset, amax],
- Print["case 1"];
- adouble = Select[aset, Not[MemberQ[Mset, #]] &];
- adouble2 = Select[adouble, Not[MemberQ[Mset, # + amax]] &];
- (*guaranteed to exist by counting*)
- aremo = {adouble2[[1]], amax};
- anext = Select[aset, Not[MemberQ[aremo, #]] &];
- mnext =
- Select[Mset, # > amax + adouble2[[1]] &] - amax -
- adouble2[[1]];
- Print[anext, mnext];
- path = Flatten[{aremo, findpath[anext, mnext]}];,
- (*else, easy*)
- Print["case 2"];
- anext = Select[aset, # < amax &];
- mnext = Select[Mset, # > amax &] - amax;
- path = Flatten[{amax, findpath[anext, mnext]}];
- ],
- If[MemberQ[Mset, amax],
- Print["case 3"];
- mprime = Select[Mset, # != mM &] - amax;
- anext = Select[aset, # < amax &];
- Print[anext, mprime];
- tpath = findpath[anext, mprime];
- Print[tpath];
- path = Insert[tpath, amax, 2];,
- Print["case 4"];
- mprime = Select[Mset, # != mM &] - amax;
- anext = Select[aset, # < amax &];
- Print[anext, mprime];
- tpath = findpath[anext, mprime];
- Print[tpath];
- parsum = amax;
- k = 1;
- t = 0;
- Do[parsum = ai + parsum;
- If[parsum == mM, t = 1; Print["break", parsum]; Break[]];
- k = k + 1;, {ai, tpath}];
- If[t == 1,
- path =
- Flatten[{tpath[[k]],
- Insert[Delete[tpath, k], amax, k + 1]}];,
- path = Flatten[{amax, tpath}];];
- ]
- ]
- ];
- path
- ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement