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

c2c网站的类型236企业邮箱登录入口

c2c网站的类型,236企业邮箱登录入口,购物网站建设教程,南昌网站建设服务平台给定一个 n 个点 m 条边的有向图#xff0c;图中可能存在重边和自环#xff0c;所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离#xff0c;如果无法从 1 号点走到 n 号点#xff0c;则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…给定一个 n 个点 m 条边的有向图图中可能存在重边和自环所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离如果无法从 1 号点走到 n 号点则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整数 x,y,z表示存在一条从点 x 到点 y 的有向边边长为 z。 输出格式 输出一个整数表示 1 号点到 n 号点的最短距离。 如果路径不存在则输出 −1。 数据范围 1≤n≤500, 1≤m≤10^5, 图中涉及边长均不超过10000。 输入样例 3 3 1 2 2 2 3 1 1 3 4输出样例 3 思路 最短路问题可以用dijkstra算法来解决这里是解决各种最短路问题的框架 因为这道题求的是单源最短路且每条路权值都为正数并且边的量级明显大于点1≤n≤500, 1≤m≤10^5是稠密图所以用朴素dijkstra算法解决 朴素dijkstra算法的原理 初始化除了起点之外每个点到起点的距离为无穷大。我们创建一个集合s表示当前已确定最短距离的点对于n个点循环n次每次找到一个不在集合s中的离起点题目中的1号点最近的点然后将它加入集合s并用这个点去更新其他所有点距离。 const int N510; int n,m; int g[N][N]; //题目中是稠密图用邻接矩阵写g[1][2]表示从1节点指向2节点的距离 int dist[N]; //从1号点走到每个点的距离最短距离 bool st[N]; //每个点最短路是否已经确定,true为确定 因为是稠密图所以我们用邻接矩阵g[ ][ ]存储边和点的关系。 for(int i0;in;i) //迭代n次每次做两件事1.找到集合外到起点最短距离的点 2.用这个点来更新到其他点的最短距离{int t0; //t表示当前要找的集合外到起点最短距离的点0表示初始化for(int j1;jn;j) //第一轮循环,寻找集合外到起点最短距离的点一开始1号点也是在集合外的所以j从1开始找{//找当前不确定最短距离的点集合外即st为false到起点距离最短的点if(!st[j] (dist[t]dist[j])) //当前点最短路还没被确定并且当前t不是最短的一开始的d[t]是无穷d[1]是0所以1号点就会找到{tj; //换成短的那条路 }}st[t]true; //找到了集合外到起点最短距离的点标记其实就是加入了确定最短距离的集合for(int j1;jn;j) //第二轮循环,用已经确定了的最短距离的点来更新到其他点的最短距离{dist[j]min(dist[j],dist[t]g[t][j]); //更新1到j这条路的长度从1到t再从t到j的距离与1到j距离比较换成短的那条路} } dijkst算法的核心代码进行n次循环每次循环找到集合外到起点最短距离的点 然后用这个点来更新到其他点的最短距离。 for(int j1;jn;j) //第一轮循环,寻找集合外到起点最短距离的点一开始1号点也是在集合外的所以j从1开始找{//找当前不确定最短距离的点集合外即st为false到起点距离最短的点if(!st[j] (dist[t]dist[j])) //当前点最短路还没被确定并且当前t不是最短的一开始的d[t]是无穷d[1]是0所以1号点就会找到{tj; //换成短的那条路 }}st[t]true; //找到了集合外到起点最短距离的点标记其实就是加入了确定最短距离的集合 经过第一次循环后我们找到了一个点t将它加入集合s这里每次t初始化为0dist[0]0x3f3f3f3f保证了后面(dist[t]dist[j])找到的是集合s外的点的离起点最近的点因为dist[t]是最大的正无穷多次比较之后dist值最小的点就会加入集合s。 for(int j1;jn;j) //第二轮循环,用已经确定了的最短距离的点来更新到其他点的最短距离{dist[j]min(dist[j],dist[t]g[t][j]); //更新1到j这条路的长度从1到t再从t到j的距离与1到j距离比较换成短的那条路} 第二个循环用当前找到的点t去更新后面的点到起点的距离方法就是遍历1到n每次看是1号点到j号点的距离大还是1号点到t号点再从t号点到j号点的距离大我们保留短的那条路。 while(m--){int a,b,c;cinabc;g[a][b]min(g[a][b],c); //如果两个点之间有多条边保留最短边因为初始化g为无穷大所以一开始是让g[a][b]c后面如果出现了一样的点就会取其中的最小值} 在主函数中因为题目没有说不存在自边和环所以可能从一个点到另一个点有多条边我们只需要保留其中最短的就好。 补充这里的代码很多处都用到了0x3f是因为这个数字能近似表达正无穷它的值是1061109567是10^9级别并且还能保证无穷大加无穷大仍然不会超限因为0x3f3f3f3f0x3f3f3f3f2122219134这非常大但却没有超过32-bit int的表示范围我们使用memset()是对char操作即一个字节一个字节的操作如果此时初始化的变量为int类型4字节那么此时的变量就会被初始化成四个0x3f即0x3f3f3f3f这个0x是十六进制的意思。 if(dist[n] 0x3f3f3f3f) //当1号点距离到n号点距离为无穷大时即1和n不连通注意这里变成了0x3f3f3f3f{return -1;} 在后面比较的时候注意这个值是0x3f3f3f3f我们只是用memset赋值的时候给每个字节赋值0x3f整个int变量是0x3f3f3f3f。  参考0x3f~0x3f3f3f3f的来龙去脉详解-CSDN博客关于memset函数和赋值0x3f2021-5-5-CSDN博客 示例代码 #includeiostream #includecstring #includealgorithm using namespace std; const int N510; int n,m; int g[N][N]; //题目中是稠密图用邻接矩阵写g[1][2]表示从1节点指向2节点的距离 int dist[N]; //从1号点走到每个点的距离最短距离 bool st[N]; //每个点最短路是否已经确定,true为确定int dijkstra() {memset(dist,0x3f,sizeof(dist)); //初始化时每个点到起点距离为无穷大dist[1]0; //起点到自身的距离为0for(int i0;in;i) //迭代n次每次做两件事1.找到集合外到起点最短距离的点 2.用这个点来更新到其他点的最短距离{int t0; //t表示当前要找的集合外到起点最短距离的点0表示初始化for(int j1;jn;j) //第一轮循环,寻找集合外到起点最短距离的点一开始1号点也是在集合外的所以j从1开始找{//找当前不确定最短距离的点集合外即st为false到起点距离最短的点if(!st[j] (dist[t]dist[j])) //当前点最短路还没被确定并且当前t不是最短的一开始的d[t]是无穷d[1]是0所以1号点就会找到{tj; //换成短的那条路 }}st[t]true; //找到了集合外到起点最短距离的点标记其实就是加入了确定最短距离的集合for(int j1;jn;j) //第二轮循环,用已经确定了的最短距离的点来更新到其他点的最短距离{dist[j]min(dist[j],dist[t]g[t][j]); //更新1到j这条路的长度从1到t再从t到j的距离与1到j距离比较换成短的那条路} }if(dist[n] 0x3f3f3f3f) //当1号点距离到n号点距离为无穷大时即1和n不连通注意这里变成了0x3f3f3f3f{return -1;}return dist[n]; //返回从1号点走到n号点的距离最短距离 } int main() {ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cinnm; //读入点数和边数memset(g,0x3f,sizeof(g)); //0x3f是无穷大memset按字节赋值一个字节就是0x3fint有四个字节所以是0x3f3f3f3fwhile(m--){int a,b,c;cinabc;g[a][b]min(g[a][b],c); //如果两个点之间有多条边保留最短边因为初始化g为无穷大所以一开始是让g[a][b]c后面如果出现了一样的点就会取其中的最小值}coutdijkstra();return 0; }
http://www.pierceye.com/news/92949/

相关文章:

  • 北京建设官方网站常州做网站那家快
  • 网站建设源码包射阳网页设计
  • 做企业网站备案都需要什么织梦 安装网站
  • 查询网站收录命令用wordPress搭建图片库
  • 网站开发的验收标准给几个网址谢谢
  • 手表网站大全网络推广竞价
  • 中创高科官方网站wordpress 页面添加js
  • 平台网站怎么做专业网站设计公司排名
  • 网站开发公司 重庆百度seo标题优化软件
  • wordpress 导入主题网站建设优化广告流量
  • 网店装修网站房屋装修设计费一般多少
  • 微信公众平台制作网站设计网站页面要怎么切图
  • 个人网站 备案 类型小红书笔记推广
  • 门户网站怎么创建网页制作步骤php
  • 六师五家渠市建设局网站wordpress 定时发布插件
  • 深圳外贸网站外贸网站建设安阳网站建设服务
  • wdcp 网站建设做民宿推广都有哪些网站
  • 常见的网站开发环境网站建设的结构
  • 贵阳网站推广优化公司做网站的公司搞什么活动
  • 安徽平台网站建设制作坪山网站设计的公司
  • 如何做挂qq的网站2017网站建设
  • wordpress语言切换网站保定广告设计公司
  • 做网站需要走公司吗运行一个网站要多少钱
  • 怎样可以免费做网站wap网站软件
  • 织梦手机网站免费模板漳州城乡建设局网站
  • 厦门建设网站的公司php除了写网站吗
  • 如何做全网影视网站居然之家装修公司怎么样
  • 佛山网站建设公司哪家最好万能软文范例800字
  • 网站排名优化如何做wordpress 免费版广告
  • 拓客网站建设建易网官网