Become the Hydra Slayer
JavaScript, 230 223 bytes

f=(h,t,s)=&gt;{m=h-Math.min(...s),d=1,q=[],s.map(a=&gt;q.push([],h));while(q.length){p=q.shift(),h=q.shift(),s.map(w=&gt;!(a=w?h+w:h/2)?d=w:!(a%1)&amp;a&gt;0&amp;a&lt;m&amp;!f[a+=t]?f[q.push([...p,w],a),a]=1:0);d&lt;1?(q=[],p).push(d):0}return d&lt;1?p:[]}




_=_=&gt;f=(h,t,s)=&gt;{m=h-Math.min(...s),d=1,q=[],s.map(a=&gt;q.push([],h));while(q.length){p=q.shift(),h=q.shift(),s.map(w=&gt;!(a=w?h+w:h/2)?d=w:!(a%1)&amp;a&gt;0&amp;a&lt;m&amp;!f[a+=t]?f[q.push([...p,w],a),a]=1:0);d&lt;1?(q=[],p).push(d):0}return d&lt;1?p:[]}

console.log(`[${_()(5, 9,  [-1,-2,-5])}]`);
console.log(`[${_()(12, 1, [0,-1])}]`);
console.log(`[${_()(8, 2,  [-9,-1])}]`);
console.log(`[${_()(1, 2,  [0,-4])}]`);
console.log(`[${_()(3, 2,  [0,-4,-1])}]`);
console.log(`[${_()(3, 4,  [0,-4,-1])}]`);
console.log(`[${_()(3, 23, [0,-1,-26])}]`);
console.log(`[${_()(16, 1, [0,-4,-2])}]`);




Ungolfed version:

f=(heads,turn,swords)=&gt;{
  max=heads-Math.min(...swords);

  found=1;
  flags=[];
  queue=[];
  swords.map(a=&gt;queue.push([],heads));

  while(queue.length){
    path=queue.shift();
    heads=queue.shift();

    swords.map(sword=&gt;{
      after=sword?heads+sword:heads/2;

      if(!after){
        found=sword;
      }else if(!(after%1)&amp;after&gt;0&amp;after&lt;max&amp;!flags[after+=turn]){
        flags[after]=1;
        queue.push([...path,sword],after);
      }
    });

    if(found&lt;1){
      path.push(found);
      break;
    }
  }

  return found&lt;1?path:[];
}


The bisector is represented as 0.