Bandwidth UVA - 140

版权声明:欢迎转载!拒绝抄袭. https://blog.csdn.net/qq_36257146/article/details/88363716
#include <iostream>
#include <bits/stdc++.h>
#define maxn 27
#define inf 0x3f3f3f3f
using namespace std;

char letter[maxn];
int p[maxn];
int pos[maxn];
int f[maxn];

int main()
{
    string s;
    while(cin>>s&&s[0]!='#')
    {
        map<char,int>mp;
        vector<int>u,v;
        int len = s.size();
        int idx = 0;
        for(int i = 0;i<len;i++)
        {
            if(isalpha(s[i]))
            {
                if(!mp.count(s[i]))
                {
                    mp[s[i]] = idx;
                    letter[idx++] = s[i];
                }
            }
        }
        sort(letter,letter+idx);
        for(int i = 0;i<idx;i++)
        {
            mp[letter[i]] = i;    //为每一个字母分配id
        }

        //
        for(int i = 0;i<len;i++)
        {
            int t = i;
            i+=2;
            while(isalpha(s[i])&&i<len)
            {
                u.push_back(mp[s[t]]);
                v.push_back(mp[s[i]]);
                i++;
            }
        }
        int ans = 0x3f3f3f3f;
        for(int i = 0;i<idx;i++) p[i] = i;
        do
        {
            int temp = 0;
            for(int i = 0;i<idx;i++) pos[p[i]] = i;//代号的坐标
            for(int i = 0;i<v.size();i++)//找两点之间的距离
            {
                temp = max(temp,abs(pos[v[i]]-pos[u[i]]));
                if(temp>ans) break;
            }
            if(temp<ans)
            {
                ans = temp;
                memcpy(f,p,sizeof(p));//复制
            }
        }while(next_permutation(p,p+idx));
        for(int i = 0;i<idx;i++)
        {
            cout<<letter[f[i]]<<" ";
        }
        cout<<"-> "<<ans<<endl;
    }
    return 0;
}
/**
A:FB;B:GC;D:GC;F:AGH;E:HD
#
**/

猜你喜欢

转载自blog.csdn.net/qq_36257146/article/details/88363716