【发布时间】:2017-02-01 20:43:48
【问题描述】:
我正在尝试在 c++ 中实现一个函数,该函数使用 Needleman-Wunsch 算法反向计算得分矩阵,但出现分段错误 11。
#include <string>
#include <vector>
int w(char x, char y){
if (x == y){return 0;
}else{return 1;
}
};
void compute_SM(std::string const & seq1, std::string const & seq2)
{
int ws_cases[3];
std::string m_seq1 = seq1 + " ";
std::string m_seq2 = seq2 + " ";
std::vector<int> rows(m_seq1.size(),0);
std::vector<std::vector<int>> matrix(m_seq2.size(), rows);
for (int i = 1; i< m_seq1.size(); i++){rows[i] = i*1;};
for (int i = 1; i< m_seq2.size(); i++){matrix[0][i] = i*1;};
for (unsigned int j = m_seq1.size()-1;j >= 1; j--){
for (unsigned int i = m_seq2.size()-1;i >= 1; i--){
ws_cases[0] = matrix[i+1][j+1] + w(m_seq1[j],m_seq2[i]);
ws_cases[1] = matrix[i+1][j] + 1;
ws_cases[2] = matrix[i][j+1] + 1;
matrix[i][j] = *std::max_element(ws_cases, ws_cases+3);
}
}
}
int main(int argc, char** argv){
compute_SM("BANANAS", "BANDS");
}
【问题讨论】:
-
int i = 1看起来很可疑。在 c++ 中,索引从0开始。 -
通常是的,但在这种情况下我不需要覆盖 0 索引上的值
-
i*1是干什么用的? -
请给我们something compilable。换句话说,这里需要minimal reproducible example。
-
你认为
=>是什么意思?
标签: c++ string for-loop matrix segmentation-fault