uva 140 - Bandwidth

简介: 点击打开链接 题目意思:给定n个节点,(n> c) { if (c == '#') break; memset(mark, 0, sizeof (mark)); mem...

点击打开链接


题目意思:给定n个节点,(n<=8),节点的编号为A~Z 来表示,要求找到一个节点的序列,使得该序列最大的节点的Bandwidth为所有序列中的最小值,(节点的Bandwidth是指和它所连接的点中和它距离最大的值)。


解题思路:由于最多只有8个节点,那么可以枚举这个解空间的所有情况,然后找到其中的最有解并且记录下它的节点顺序,那么我们可以通过求全排列的方法去一一枚举这些排列


代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <algorithm>
using namespace std;
const int MAXN = 100000;

int k, cur, ans;
int vis[8];//存储节点的编号,通过编号来映射节点
int mark[30][30]; //用来标记节点和哪些节点有连接
int Minsum[MAXN][8];//用来记录每一个排列的节点的顺序
int Min;

//计算最小值的函数
void Minfun() {
    int tempmax[8];//临时存储每一个点的最大值
    int T, Tmax = 0;//T存储当前节点和另外节点的距离,Tmax存储一个点中的最大距离(后面求一个排列的最大值)
    memset(tempmax, 0, sizeof (tempmax)); //初始话为0
    for (int i = 0; i < k; i++) {//枚举这个序列的点
        Tmax = 0;
        for (int j = 1; j <= 26; j++) {
            if (mark[vis[i]][j]) {//找打一个点的匹配点的最大的值
                for (int t = 0; t < k; t++) {//找匹配点的位置
                    if (j == vis[t]) {
                        T = abs(i - t); //找到位置的距离
                        break;
                    }
                }
                if (Tmax < T)
                    Tmax = T;
            }
        }
        tempmax[i] = Tmax;
    }
    Tmax = 0;
    for (int i = 0; i < k; i++) {//求出该种排列的最大值
        if (Tmax < tempmax[i]) {
            Tmax = tempmax[i];
        }
    }
    if (Min > Tmax) {//更新Min的值
        ans = cur;//记录位置
        Min = Tmax;
    }
}

//处理函数

void solve() {
    Min = 100000000;
    cur = 0;
    for (int i = 0; i < k; i++)//必须先保存到Minsum[0]里,不然调用了next_permutation(vis, vis + k)将直接跳到下一个排列
        Minsum[0][i] = vis[i];
    Minfun();//求出Min
    ++cur;
    while (next_permutation(vis, vis + k)) {//得到全排列
        for (int i = 0; i < k; i++)
            Minsum[cur][i] = vis[i]; //把序列存入mark数组里面
        Minfun();//判断是否最小值
        cur++;
    }
}

//输出函数

void output() {
    for (int i = 0; i < k; i++)
        printf("%c ", Minsum[ans][i] + 64);
    printf("-> %d\n", Min);
}
//主函数

int main() {
    int i, j;
    char c;
    int Tvis[27];
    string str;
    while (cin >> c) {
        if (c == '#')
            break;
        memset(mark, 0, sizeof (mark));
        memset(Tvis, 0, sizeof (Tvis));
        memset(Minsum, 0, sizeof (Minsum));
        i = c - 64;
        vis[0] = i;
        Tvis[i] = 1;
        k = 1;
        cin >> str;
        //处理字符串
        for (j = 0; j < str.size(); ++j) {
            if (str[j] == ':') {
                continue;
            }
            if (str[j] == ';') {
                ++j;
                i = str[j] - 64;
                if (isupper(str[j])) {
                    if (Tvis[str[j] - 64] == 0) {
                        Tvis[str[j] - 64] = 1;
                        vis[k] = str[j] - 64;
                        ++k;
                    }
                }
                continue;
            }
            if (isupper(str[j])) {
                if (Tvis[str[j] - 64] == 0) {
                    Tvis[str[j] - 64] = 1;
                    vis[k] = str[j] - 64;
                    ++k;
                }
            }
            mark[i][str[j] - 64] = 1;//标记为1,说明两个节点有连接
        }
        sort(vis, vis + k); //必须先对数组先排序
        solve();
        output();
    }
}


目录
相关文章
|
22小时前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
10天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
4天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
429 191
|
3天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
8天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
4天前
|
消息中间件 安全 NoSQL
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的 2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件 AliEE”、“消息队列软件 RocketMQ”、“云数据库 Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
313 196