当前位置: 首页 > wzjs >正文

建设网站哪个比较好宁波百度关键词推广

建设网站哪个比较好,宁波百度关键词推广,营销设计网站建设,申请网站官网一、题目&#xff1a; 二、题解 2.1&#xff1a;朴素prim的步骤解析 O ( n 2 ) O(n^2) O(n2)(n<1e3) 0、假设&#xff0c;我们现在有这样一个有权图 1、我们随便找一个点&#xff0c;作为起点开始构建最小生成树(一般是1号)&#xff0c;并且存入intree[]状态数组中&#xf…

一、题目:

在这里插入图片描述

二、题解

在这里插入图片描述

2.1:朴素prim的步骤解析 O ( n 2 ) O(n^2) O(n2)(n<=1e3)

0、假设,我们现在有这样一个有权图

在这里插入图片描述

1、我们随便找一个点,作为起点开始构建最小生成树(一般是1号),并且存入intree[]状态数组中(该数组表示是否访问过了)

在这里插入图片描述

2、找所有点当中,距离intree[]最近的点,

  • 循环 n − 1 n-1 n1(因为已经确定了1这个点),每次找距离intree[]最近的点作为拓展点,
  • 即选择了[2]这个点
    在这里插入图片描述

3、把dis[2](2距离intree的距离)累计起来(res+=dis[2]),并且更新所有点的dis

在这里插入图片描述

4、此时,重复找所有点当中,距离intree[]最近的点(重复2/3)…

三、朴素prim代码解析

3.1、代码分块解析:

这段代码实现了 Prim 算法 用于求解 最小生成树,我会将代码分块并逐步解释每一块的作用。

1. 常量定义

const int N = 103;  // 设置最大点数
int a[N][N], dis[N];
bool st[N];
int n, m;

解释:

  • N 定义了图中点的最大数量,设置为 103。
  • a[N][N]:一个二维数组,表示图的邻接矩阵,存储两点之间的边权。
    • a[i][j]:表示i–>j的距离
  • dis[N]:一个一维数组,表示从起始点到每个节点的最短距离。
  • st[N]:布尔型数组,用来标记某个节点是否已经被加入最小生成树。(图解中的intree数组)
  • nm:分别表示图中的节点数和边数。

2. solve 函数的初始化

void solve()
{memset(dis, 0x3f, sizeof(dis));  // 初始化dis数组,设为最大值memset(a, 0x3f, sizeof(a));      // 初始化邻接矩阵为最大值// 初始化cin >> n >> m;for (int i = 1; i <= m; i++) {int ui, vi, wi;cin >> ui >> vi >> wi;    a[ui][vi] = min(a[ui][vi], wi);a[vi][ui] = min(a[vi][ui], wi);}for (int i = 1; i <= n; i++) a[i][i] = 0;  // 自己到自己没有边,权重为 0

解释:

  • memset(dis, 0x3f, sizeof(dis)):将 dis 数组初始化为一个较大的值(通常为无穷大,表示尚未连接的节点)。
  • memset(a, 0x3f, sizeof(a)):将邻接矩阵 a 初始化为无穷大,表示两点之间如果没有边,则权重为无穷大。
  • 输入节点数 n 和边数 m,然后读入每条边的信息,更新邻接矩阵 a。同时,因为有可能存在重复边,所以采用 min 取最小边权,确保保存的是权重最小的边。
  • 设置每个节点到自身的距离为 0

3. 最小生成树的 Prim 算法核心部分

   dis[1] = 0;  // 从节点1开始,初始权重为0int res = 0;  // 记录最小生成树的总权重for (int i = 1; i <= n; i++) // 进行n次选择最小值操作{  int temp = -1;  // 用于记录当前最小值对应的节点// 遍历所有节点,找出距离最小的未加入最小生成树的节点for (int j = 1; j <= n; j++) {  //和Dijkstra一样,//1.当j这个点还没访问过,2.遍历的的点j<当前点temp的距离,那么就更新temp//temp==-1只是为了确保其能够第一次进入循环,详解看Dijkstraif (!st[j] && ((temp == -1) || (dis[j] < dis[temp]))) {temp = j;}}//此时temp就是距离intree最近的点if (temp == -1) // 如果所有节点都已经被选中,说明图不连通,直接return{  cout << -1 << '\n';return; }

解释:

  • 初始化 dis[1] = 0,表示从节点 1 开始构建最小生成树,起始点的距离为 0
  • res 用来记录最小生成树的总权重。
  • 外层 for (int i = 1; i <= n; i++) 进行 n 次选择最小值操作,每次选择一个最小的未加入最小生成树的节点。
  • 内层循环 for (int j = 1; j <= n; j++) 遍历所有节点,找出距离当前生成树最近的节点。条件是节点未加入生成树 !st[j]dis[j] 小于当前最小值。
  • temp == -1 用来判断是否图不连通。如果没有找到最小值节点,说明图是断开的,输出 -1

4. 更新最小生成树的权重并松弛边

       res += dis[temp];  // 将当前最小值加到结果中st[temp] = true;    // 标记节点temp已加入最小生成树dis[temp] = 0;      // 当前节点到自己的距离设为0(实际上不影响结果)for (int i = 1; i <= n; i++) {  // 松弛与temp相连的所有边if (!st[i]) {  // 只有未加入最小生成树的节点才能被松弛dis[i] = min(dis[i], a[temp][i]);} }    }cout << res << '\n';  // 输出最小生成树的总权重
}

解释:

  • 将选中的最小值节点 temp 的距离 dis[temp] 加到总权重 res 中。
  • 标记该节点已经被加入最小生成树,即 st[temp] = true
  • 进行 松弛操作,尝试更新与当前最小值节点相连的所有边的权重,更新未加入生成树的节点的最短距离 dis[i]

3.2、完整代码

#include<bits/stdc++.h>
using namespace std;const int N=103;
struct node{int v;//指向点int w;//权重
};
int a[N][N],dis[N];
bool st[N];
int n,m;void solve()
{memset(dis,0x3f,sizeof(dis));memset(a,0x3f,sizeof(a));//初始化cin>>n>>m;for(int i=1;i<=m;i++){int ui,vi,wi;cin>>ui>>vi>>wi;    //g[ui].push_back({vi,wi});a[ui][vi]=min(a[ui][vi],wi);a[vi][ui]=min(a[vi][ui],wi);}for(int i=1;i<=n;i++) a[i][i]=0;dis[1]=0; //从1开始,1的权重为0int res=0;for(int i=1;i<=n;i++)   //找n次最小值{int temp=-1;    //表示dis最小点for(int j=1;j<=n;j++)   //遍历每个点找最小值{//如果j还没被选中过if(!st[j] && ((temp==-1)||(dis[j]<dis[temp]))){temp=j;}}if (temp == -1) // 如果没有点可选,说明图不连通{cout<<-1<<'\n';break; }//此时表示已经选中了最小值tempres+=dis[temp];st[temp]=true;dis[temp]=0;//距离设置为0for(int i=1;i<=n;i++)    //松弛temp相连的边a[temp][i]{if(!st[i]) //表示i话没有松弛过{dis[i]=min(dis[i],a[temp][i]);} }    }cout<<res<<'\n';
} int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int _=1;while(_--) solve();return 0;
}
http://www.dtcms.com/wzjs/151445.html

相关文章:

  • 家电网站设计市场营销实务
  • 国外vi设计网站seo管理系统培训运营
  • 网站设计公司如何做好网站建设百度开户公司
  • 网站建设开发语言与平台网站案例分析
  • 丹阳火车站片区规划口碑营销5t
  • 安徽省合肥市建设局网站线下营销方式主要有哪些
  • 安阳手机网站建设电商关键词一般用哪些工具
  • 计算机网站设计怎么做帮平台做推广怎么赚钱
  • 丹灶做网站怎么在百度上推广自己的公司信息
  • 做网站没签合同优化关键词的方法
  • 建立网站该怎样做google应用商店
  • 深圳自适应网站建设价格谷歌应用商店app下载
  • 网站更换空间需要怎么做苏州seo免费咨询
  • 嘉兴网站网站建设嘉兴seo外包
  • 凡客做网站简阳seo排名优化培训
  • 做网站需要注册商标第几类全球热搜榜排名今日
  • 做网站关键词加到什么位置中国人民银行网站
  • 微网站建设哪家好百度竞价推广方法
  • 网站改版对seo影响南宁seo渠道哪家好
  • 便宜网站建设哪家好seo项目优化案例分析文档
  • 有什么好的网站做数学题吗市场调研方案范文
  • 哪个网站能找到做夜场的女孩seo推广方法有哪些
  • 国外的网页制作网站12345微信公众号
  • 网页设计服装网站建设百度seo快速
  • 荔湾建网站公司临沂网站建设优化
  • 武汉网站建设电话咨询如何分步骤开展seo工作
  • 邯郸移动网站建设价格怎么样自己创建网站
  • 网站建设优化服务价格怎样在百度上建立网站
  • 曲靖做网站建设的公司营销软文300字范文
  • 备案的时候网站要建设好吗seo薪资水平