📄 tracebackopt.cpp
字号:
#include "muscle.h"
#include "pwpath.h"
void TraceBackToPath(int **TraceBack, unsigned uLengthA,
unsigned uLengthB, PWPath &Path)
{
Path.Clear();
PWEdge Edge;
Edge.uPrefixLengthA = uLengthA;
Edge.uPrefixLengthB = uLengthB;
for (;;)
{
if (0 == Edge.uPrefixLengthA && 0 == Edge.uPrefixLengthB)
break;
int iDelta = TraceBack[Edge.uPrefixLengthA][Edge.uPrefixLengthB];
#if TRACE
Log("TraceBack[%u][%u] = %d\n",
Edge.uPrefixLengthA, Edge.uPrefixLengthB, iDelta);
#endif
if (0 == iDelta)
{
assert(Edge.uPrefixLengthA > 0);
assert(Edge.uPrefixLengthB > 0);
Edge.cType = 'M';
Path.PrependEdge(Edge);
--(Edge.uPrefixLengthA);
--(Edge.uPrefixLengthB);
continue;
}
else if (iDelta > 0)
{
Edge.cType = 'D';
while (iDelta-- > 0)
{
assert(Edge.uPrefixLengthA > 0);
Path.PrependEdge(Edge);
--(Edge.uPrefixLengthA);
}
}
else if (iDelta < 0)
{
Edge.cType = 'I';
while (iDelta++ < 0)
{
assert(Edge.uPrefixLengthB > 0);
Path.PrependEdge(Edge);
--(Edge.uPrefixLengthB);
}
}
if (0 == Edge.uPrefixLengthA && 0 == Edge.uPrefixLengthB)
break;
assert(Edge.uPrefixLengthA > 0);
assert(Edge.uPrefixLengthB > 0);
Edge.cType = 'M';
Path.PrependEdge(Edge);
--(Edge.uPrefixLengthA);
--(Edge.uPrefixLengthB);
}
#if TRACE
Log("TraceBackToPath ");
Path.LogMe();
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -