0

インデックスのペアのリストのようなパスがボードにあります

list<pair<int,int> > *path;

キャラクターが障害物に到達したら、現在の位置から最後まですべて新しいパスに置き換える必要がありますが、最初から障害物までのパスを同じように保存します(小さなキャラクターが開始セルと目的地セルを持ち、開始から目的地に移動して戻ってもう一度繰り返すことを明確にするため)同じ。多くの計算を回避するために、障害物のないパスの一部を保存し、障害物から最後まで古い部分を新しいものに置き換えるようにします)。反復せずにこれを行う簡単な方法はありますか?

後で明確にするために編集:パスは[(0,0)、(0,1)、(1,1)、(1,2)、(1,3)、(1,4)]であり、障害物はセル上にあります(1,2)したがって、文字は[(0,0)、(0,1)、(1,1)]になり、たとえば[(1,1)、(2,1)、(2 、2)、(1,3)、(1,4)]なので、古いパス(1,1)、(1,2)、(1,3)、(1,4)から(1 、1)、(2,1)、(2,2)、(1,3)、(1,4)

4

1 に答える 1

1

私があなたの質問を正しく理解している場合:あなたはpathからのリストstartを持っています。これは途中のどこかで障害物にぶつかります(どこを知っている必要があるので、障害物を指すdestination有効なものがあるとしましょう)。list<...>::iterator obstacleまた、newpathから*(obstacle - 1)destinationの移行があり、これら2つのパスを一緒にカットアンドペーストしたいとします。これがあなたのやり方です(ここではslistの代わりに list*sを想定していますが、本当に必要な場合は、ポインターで動作するように簡単に書き直すことができます):

//kill the wrong bit of the old path
path.erase(obstacle, path.end());
//append the correct newpath
path.splice(path.end(), newpath, newpath.begin(), newpath.end());

newpathこの操作の後は空であることに注意してください。

于 2013-02-24T03:39:15.930 に答える