Floyd算法,最短路,判断a,b是否相等。
代码:
#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #include <iomanip> using namespace std; int k; int mp[26][26]; int main() { string a,b,c,d; cin>>a>>b; cin>>k; for(int i = 0;i < 26;i ++) { for(int j = 0;j < 26;j ++) { mp[i][j] = 1000; } mp[i][i] = 0; } for(int i = 0;i < k;i ++) { cin>>c>>d; if(c != d)mp[c[0] - 'a'][d[0] - 'a'] = 1; } for(int k = 0;k < 26;k ++) { for(int i = 0;i < 26;i ++) { for(int j = 0;j < 26;j ++) { if(mp[i][k] + mp[k][j] < mp[i][j])mp[i][j] = mp[i][k] + mp[k][j]; } } } int cc = 0; for(int i = 0;i < a.size();i ++) { if(mp[a[i] - 'a'][b[i] - 'a'] == 1000) { cc = -1; break; } else cc += mp[a[i] - 'a'][b[i] - 'a']; } cout<<cc; }
如果觉得有帮助,点个推荐啦~