鱼C论坛

 找回密码
 立即注册
查看: 2740|回复: 3

求助大神,这个该怎么改

[复制链接]
发表于 2021-6-15 18:23:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <bits/stdc++.h>

using namespace std;
int a[5][6] = {{0, 0,  0,  0,  0,  0},
               {0, 9,  2,  4,  15, 9},
               {0, 6,  5,  12, 4,  2},
               {0, 11, 7,  13, 4,  17},
               {0, 19, 11, 15, 8,  9}};
bool v[10];
map<int, string> mp;
struct sta {
    int sum, two;
    pair<int, int> c;
    vector<pair<int, int> > one;
};
vector<sta> sch;

void dfs(int u, sta now) {
    if (u == 5) {
        if (!sch.empty() && sch.back().sum > now.sum)sch.clear();
        if (sch.empty() || sch.back().sum == now.sum)
            sch.push_back(now);
        return;
    }
    if (!sch.empty() && sch.back().sum < now.sum)return;
    vector<int> c;
    for (int i = 1; i <= 5; i++)if (!v[i])c.push_back(i);
    if (u == 4 && c.size() == 2) {
        v[c[0]] = true, v[c[1]] = true;
        sta nex = now;
        nex.two = u;
        nex.sum += a[u][c[0]] + a[u][c[1]];
        nex.c = make_pair(c[0], c[1]);
        dfs(u + 1, nex);
        v[c[0]] = false, v[c[1]] = false;
        return;
    }
    for (int i = 0; i < c.size(); i++) {
        sta nex = now;
        nex.sum += a[u][c[i]];
        nex.one.emplace_back(u, c[i]);
        v[c[i]] = true;
        dfs(u + 1, nex);
        v[c[i]] = false;
    }
    for (int i = 0; i < c.size(); i++)
        for (int j = i + 1; j < c.size(); j++) {
            v[c[i]] = true, v[c[j]] = true;
            sta nex = now;
            nex.two = u;
            nex.sum += a[u][c[i]] + a[u][c[j]];
            nex.c = make_pair(c[i], c[j]);
            dfs(u + 1, nex);
            v[c[i]] = false, v[c[j]] = false;
        }
}

int main() {
    sta now = {0, 0, {0, 0}, {}};
    dfs(1, now);
    mp[1] = "甲", mp[2] = "乙", mp[3] = "丙", mp[4] = "丁";
    printf("总最小花费时间为:%d\n", sch.back().sum);
    for (int i = 0; i < sch.size(); i++) {
        cout << "方案" << i + 1 << ":" << endl;
        cout << mp[sch[i].two] << "完成任务:" << (char) ('A' + sch[i].c.first - 1) << "和"
             << (char) ('A' + sch[i].c.second - 1) << endl;
        for (int j = 0; j < sch[i].one.size(); j++) {
            cout << mp[sch[i].one[j].first] << "完成任务:" << (char) ('A' + sch[i].one[j].second - 1) << endl;
        }
        puts("");
    }
    return 0;
}
QQ截图20210615182001.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-15 18:24:27 | 显示全部楼层
你这个emplace_back是想要干嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-15 19:03:18 | 显示全部楼层
xiaosi4081 发表于 2021-6-15 18:24
你这个emplace_back是想要干嘛?

我从csdn上抄的,看不懂,运行后报错了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-15 19:16:23 | 显示全部楼层
啦啦啦95426 发表于 2021-6-15 19:03
我从csdn上抄的,看不懂,运行后报错了!

emplace_back 是另一种 push_back   不过emplace_back会原地构造对象,不触发拷贝构造和移动构造
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 14:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表