#include #include #include using namespace std; void usage(char * prog); void similarityMatrix(vector & s, vector & t); bool readFile(char * fileName, vector & v); void usage(char * prog) { cout << "Usage: " << prog << " " << endl; exit(42); } int main(int argc, char * argv[]) { vector file1, file2; if (argc < 3) usage(argv[0]); readFile(argv[1], file1); readFile(argv[2], file2); similarityMatrix(file1, file2); } bool readFile(char * fileName, vector & v) { ifstream in(fileName); if (!in.is_open()) return false; while (!in.eof()) { char chr; in >> chr; v.push_back(chr); } return true; } void similarityMatrix(vector & s, vector & t) { int s_size = s.size(); int t_size = t.size(); int F[s_size][t_size]; for (int i = 0; i < t_size; i++) F[0][i] = 0; for (int i = 0; i < s_size; i++) F[i][0] = 0; for (int i = 1; i < s_size; i++) { for (int j = 1; j < t_size; j++) { F[i][j] = max( max( F[i][j-1] - 2, F[i-1][j-1] + (s[i] == t[j] ? 1 : -1) ), max( F[i-1][j] - 2, 0 ) ); } } #if 0 cout << "Matrix: " << s_size << " x " << t_size << endl; for (int i = 0; i < s_size; i++) { for (int j = 0; j < t_size; j++) { printf("%02d ", F[i][j]); } printf("\n"); } #endif }