Floyd算法,最短路,判断a,b是否相等。
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
int k;
int mp[][];
int main()
{
string a,b,c,d;
cin>>a>>b;
cin>>k;
for(int i = ;i < ;i ++)
{
for(int j = ;j < ;j ++)
{
mp[i][j] = ;
}
mp[i][i] = ;
}
for(int i = ;i < k;i ++)
{
cin>>c>>d;
if(c != d)mp[c[] - 'a'][d[] - 'a'] = ;
}
for(int k = ;k < ;k ++)
{
for(int i = ;i < ;i ++)
{
for(int j = ;j < ;j ++)
{
if(mp[i][k] + mp[k][j] < mp[i][j])mp[i][j] = mp[i][k] + mp[k][j];
}
}
}
int cc = ;
for(int i = ;i < a.size();i ++)
{
if(mp[a[i] - 'a'][b[i] - 'a'] == )
{
cc = -;
break;
}
else cc += mp[a[i] - 'a'][b[i] - 'a'];
}
cout<<cc;
}