计蒜客 蓝桥模拟 H. 封印之门

 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;
}
原文地址:https://www.cnblogs.com/8023spz/p/8665883.html