Advertisement
Guest User

jasper

a guest
Jul 22nd, 2009
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. findpath[aset_, Mset_] :=
  2. Module[{mM, amax = Max[aset], f, path, adouble, adouble2, aremo,
  3. anext, mnext, mprime, tpath, k, parsum, ai, t},
  4. If[Length[Mset] == 0, Print["case 0"]; path = aset;,
  5. mM = Min[Mset];
  6. f = Length[Select[Mset, # < amax &]];
  7. If[f > 0,
  8. If[MemberQ[Mset, amax],
  9. Print["case 1"];
  10. adouble = Select[aset, Not[MemberQ[Mset, #]] &];
  11. adouble2 = Select[adouble, Not[MemberQ[Mset, # + amax]] &];
  12. (*guaranteed to exist by counting*)
  13.  
  14. aremo = {adouble2[[1]], amax};
  15. anext = Select[aset, Not[MemberQ[aremo, #]] &];
  16. mnext =
  17. Select[Mset, # > amax + adouble2[[1]] &] - amax -
  18. adouble2[[1]];
  19. Print[anext, mnext];
  20. path = Flatten[{aremo, findpath[anext, mnext]}];,
  21. (*else, easy*)
  22. Print["case 2"];
  23. anext = Select[aset, # < amax &];
  24. mnext = Select[Mset, # > amax &] - amax;
  25. path = Flatten[{amax, findpath[anext, mnext]}];
  26. ],
  27. If[MemberQ[Mset, amax],
  28. Print["case 3"];
  29. mprime = Select[Mset, # != mM &] - amax;
  30. anext = Select[aset, # < amax &];
  31. Print[anext, mprime];
  32. tpath = findpath[anext, mprime];
  33. Print[tpath];
  34. path = Insert[tpath, amax, 2];,
  35. Print["case 4"];
  36. mprime = Select[Mset, # != mM &] - amax;
  37. anext = Select[aset, # < amax &];
  38. Print[anext, mprime];
  39. tpath = findpath[anext, mprime];
  40. Print[tpath];
  41. parsum = amax;
  42. k = 1;
  43. t = 0;
  44. Do[parsum = ai + parsum;
  45. If[parsum == mM, t = 1; Print["break", parsum]; Break[]];
  46. k = k + 1;, {ai, tpath}];
  47. If[t == 1,
  48. path =
  49. Flatten[{tpath[[k]],
  50. Insert[Delete[tpath, k], amax, k + 1]}];,
  51. path = Flatten[{amax, tpath}];];
  52. ]
  53. ]
  54. ];
  55. path
  56. ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement