全排列回溯剪枝。

题目数据很水。记录当前最小带宽,边回溯边计算当前序列最大的距离(也就是带宽),如果当前带宽超过了当前的最小带宽就剪枝。

注意下,数据读入时的字符串处理。

AC代码

#include<cstdio>
#include<cstring>
int G[26][26];
const char a[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int n; //记录字母种类数
int v[26],ans[10],res[10],temp[10];
int hard=10;//最终结果 

int turn(char c)
{
    return strchr(a,c)-a;
}

void dfs(int cur,int k)
{
    if(cur==n&&k<hard)
    {
        hard=k;
        for(int i=0;i<n;++i)
        {
            ans[i]=temp[i];
        }
        return ;
    }
    for(int i=0;i<n;++i)
    {
        int ok=1;
        for(int j=0;j<cur;j++)
        {
            if(temp[j]==res[i])
            {
                ok=0;
                break;
            }
        }
        if(ok)
        {
        for(int j=0;j<cur;++j)
        {
            if(G[temp[j]][res[i]])
            {
                if((cur-j)>k)
                k=cur-j;
            }
        }
        if(k<hard)
        {
            temp[cur]=res[i];
            dfs(cur+1,k);
        }
        }
    }
}
int main()
{
    char s[150];
    while(scanf("%s",s)==1&&s[0]!='#')
    {
        n=0,hard=10;
        memset(v,0,sizeof(v));
        memset(G,0,sizeof(G));
        for(int i=0,j=0;;++j)
        {
            if(s[j]==';'||s[j]=='\0')
            {
                int x=turn(s[i]),y=i+2;
                v[x]++;
                while(y!=j)
                {
                    int t=turn(s[y]);
                    G[x][t]=1;
                    G[t][x]=1;
                    ++y;
                    v[t]++;
                }
                i=j+1;
            }
            if(s[j]=='\0')
            break;
        }

        for(int i=0;i<26;++i)
        {
            if(v[i]) res[n++]=i;
        }
    //  printf("%d\n",n); //打印字母个数 

        dfs(0,1);
        for(int i=0;i<n;++i)
        {
        if(i==n-1)
        printf("%c -> %d",'A'+ans[i],hard);
        else printf("%c ",'A'+ans[i]);
        }
        printf("\n");
    }
    return 0;
}

如有不当之处欢迎指出!

uva140的更多相关文章

  1. uva140 - Bandwidth

    Bandwidth Given a graph (V,E) where V is a set of nodes and E is a set of arcs in VxV, and an orderi ...

  2. UVa140 Bandwidth 小剪枝+双射小技巧+枚举全排列+字符串的小处理

    给出一个图,找出其中的最小带宽的排列.具体要求见传送门:UVa140 这题有些小技巧可以简化代码的编写. 本题的实现参考了刘汝佳老师的源码,的确给了我许多启发,感谢刘老师. 思路: 建立双射关系:从字 ...

  3. 假回溯-uva140带宽

    题目链接:https://vjudge.net/problem/UVA-140 题解:这道题利用全排函数即可解决,但是这道题技巧性强,稍微不注意就会超时,一开始没有想起全排函数,自己写回溯全排超时了, ...

  4. Uva140 Bandwidth 全排列+生成测试法+剪枝

    参考过仰望高端玩家的小清新的代码... 思路:1.按字典序对输入的字符串抽取字符,id[字母]=编号,id[编号]=字母,形成双射       2.邻接表用两个vector存储,存储相邻关系     ...

  5. 递归回溯 UVa140 Bandwidth宽带

    本题题意:寻找一个排列,在此排序中,带宽的长度最小(带宽是指:任意一点v与其距离最远的且与v有边相连的顶点与v的距离的最大值),若有多个,按照字典序输出最小的哪一个. 解题思路: 方法一:由于题目说结 ...

  6. UVA140 ——bandwidth(搜索)

    Given a graph (V,E) where V is a set of nodes and E is a set of arcs in VxV, and an ordering on the ...

  7. 7-6 Bandwidth UVA140

    没有清空向量导致debug了好久 这题难以下手  不知道怎么dfs 原来是用排序函数. letter[n]=i; id[i]=n++; 用来储存与设置标记十分巧妙 for(;;) { while(s[ ...

  8. UVa140 Bandwidth 【最优性剪枝】

    题目链接:https://vjudge.net/contest/210334#problem/F  转载于:https://www.cnblogs.com/luruiyuan/p/5847706.ht ...

  9. UVA-140 Bandwidth (回溯+剪枝)

    题目大意:求一个使带宽最小的排列和最小带宽.带宽是指一个字母到其相邻字母的距离最大值. 题目分析:在递归生成全排列的过程中剪枝,剪枝方案还是两个.一.当前解不如最优解优时,减去:二.预测的理想解不必最 ...

随机推荐

  1. junit测试套件

    在实际项目中,随着项目进度的开展,单元测试类会越来越多,可是直到现在我们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的.为了解决这个问题,JUnit 提供了一种批量运行测试类的方法, ...

  2. win7下JAVA环境变量配置方法

    1.首先,根据自己的需要下载1.6或者1.7的JDK,安装JDK.(安装的时候记一下安装目录,后面会用到) 2.右键计算机→属性→高级系统设置→高级→环境变量,在系统变量部分新建名为"JAV ...

  3. php curl模拟登陆抓取数据

    http://www.cnblogs.com/zengguowang/p/6814474.html

  4. http常见状态码(转载)

    常见HTTP状态码 常见HTTP状态码 200 OK 301 Moved Permanently 302 Found 304 Not Modified 307 Temporary Redirect 4 ...

  5. zabbix监控windows agent安装配置

    下载Windows的zabbix客户端 下载地址:http://www.zabbix.com/download.php 从官方下载Zabbix Agent后,压缩包里面有2个目录,bin和conf,c ...

  6. 【转】vim取消高亮显示

    vim是vi的加强版. 进入vim或编辑完毕按esc后,输入/可帮助查找字符串,例如/main帮助查找main函数,找到的main高亮显示. 取消高量显示的两个办法: 1)按esc键,输入:nohl ...

  7. Linux防止ARP攻击的一些方法

    方法一,最常用的绑定网关 一般服务器的网关是不会变动的,且vps也适用. 一.查看当前网关 [root@local@xiaohuai ~]# arp -a ? (218.65.22.122) at 8 ...

  8. Jmeter之http性能测试实战 非GUI模式压测 NON-GUI模式 结果解析TPS——干货(十一)

    性能测试计划 性能测试用例 录制脚本 性能测试结果 性能测试报告 性能测试监控报告 准备工作 从脚本已录制成功之后开始进行压测 安装Jmeter拓展插件 查看 Transactions per Sec ...

  9. 【mac】mac os X更新High Sierra后出现的问题

    今天更新了一下macbook pro的系统到10.13.1版本,出现了几个小问题,总结一下解决方案: git客户端无法使用 解决方案如下: http://blog.csdn.net/kedongjun ...

  10. Linq to SQL 中实现模糊查询

    list = list.Where(i => i.Name.Contains(empName)).ToList();