栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

网络破坏者

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

网络破坏者

#include
using namespace std;
const int Max = 21;//const限定符,它把一个对象转换为一个常量 
const bool A = true;//布尔型,真/假                                       //输入定义A B两集合,A为原节点集合,B为依次拿出这些点,所放到的集合
const bool B = false;                                                   
 
int n, map[Max][Max], ans = 0;                                //输入定义最大权值(数组?)(集合?) 
bool set[Max];//set定义集合 
 
void dfs(int dep, int sum){ //void声明任意类型,定义dfs算法 
    if(dep > n){             //剪枝 
        if(sum > ans)       //递归, 猴子摘桃问题 
            ans = sum;      //ans为最大权值,即最远距离 
        return;             // 
    }
 
    int i, m;
    m = 0;
    set[dep] = A;            //A集合 
    for(i = 1; i <= dep; i ++)
        if(set[i] == B)                //
            m += map[i][dep];        //dep与i在不同集合减去两点间的权 
    dfs(dep + 1, sum + m);   //dfs算法—递归 
 
    m = 0;
    set[dep] = B;           //B集合 
    for(i = 1; i <= dep; i ++)
        if(set[i] == A)           // 
            m += map[i][dep];
    dfs(dep + 1, sum + m);
}
 
int main(){
    cin >> n;
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= n; j ++)
            cin >> map[i][j];                 //输出
    dfs(1, 0);                       //
    cout << ans << endl;          //输出ans 
    return 0;
    } 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869339.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号