EQSTR - Biến đổi chuỗi

Tác giả: RR

Ngôn ngữ: C++

#include <iostream>
#include <algorithm>
#define FOR(i,a,b) for(int i=a; i<=b; i++)
using namespace std;

int c[30][30],f[30][30];

void init() {
    FOR(i,0,25)
    FOR(j,0,25)
        c[i][j]=1000111;
        
    FOR(i,0,25) c[i][i]=0;
    
    FOR(i,0,24) c[i][i+1]=c[i+1][i]=1;
    c[25][0]=c[0][25]=1;
    
    FOR(k,0,25)
        FOR(i,0,25)
        FOR(j,0,25)
            c[i][j]=min(c[i][j],c[i][k]+c[k][j]);
            
    FOR(i,0,25)
    FOR(j,0,25) {
        int nn=10000;
        FOR(k,0,25) nn=min(nn,c[i][k]+c[j][k]);
        
        FOR(k,0,25)
        if (c[i][k]+c[j][k]==nn) {
            f[i][j]=k;
            break;
        }
    }
}

char s[100],a[100],b[100];

int main() {
    init();
    scanf("%s\n",&s);
    while (s[1]=='C') {
        scanf("%s\n",&a);
        scanf("%s\n",&b);
        FOR(i,0,strlen(a)-1)
            printf("%c",'a'+f[(int)a[i]-'a'][(int)b[i]-'a']);
        printf("\n");
        scanf("%s\n",&s);
    }
    return 0;
}

Download