数学建模-无线回归拓扑规划.pdf_第1页
数学建模-无线回归拓扑规划.pdf_第2页
数学建模-无线回归拓扑规划.pdf_第3页
数学建模-无线回归拓扑规划.pdf_第4页
数学建模-无线回归拓扑规划.pdf_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

封一 答卷编号(参赛学校填写) : 答卷编号(竞赛组委会填写) : 论文题目: B-无线回传拓扑规划 组 别: 本科生 参赛队员信息(必填): 姓姓 名名 学学 号号 联系电话联系电话 参赛队员参赛队员 1 1 张晓涛张晓涛 153401010232153401010232 1584007465815840074658 参赛队员参赛队员 2 2 张义张义 153401010223153401010223 1580405885615804058856 参赛队员参赛队员 3 3 王永利王永利 153401010201153401010201 1580405945815804059458 参赛学校: 沈阳航空航天大学-单锋、朱丽梅建模指导组 封二 答卷编号(参赛学校填写) : 答卷编号(竞赛组委会填写) : 评阅情况(学校评阅专家填写) : 学校评阅 1. 学校评阅 2. 学校评阅 3. 评阅情况(联赛评阅专家填写) : 联赛评阅 1. 联赛评阅 2. 联赛评阅 3. B 题:无线回传拓扑规划 摘要 本文通过对现有无线回传服务情况进行分析, 针对某地区中候选站点的位置 分布及特点,应用图论相关理论,应用贪心选择方法构建数据结构,使用 C+编 程语言设计了一种拓扑规划算法, 解决了 Relay 无线回传方案中的部站问题, 得 到的部站方案在满足约束条件的前提下, 算法考虑了更低的总体成本和更低的回 传路径损耗,为 Relay 无线回传方案可实施性提供了方法。 针对题中任务和挑战一,通过对站点分布分析,根据站点间的相互位置、站 点间拓扑关系限制等条件, 先将站点分布的状况将其划分为两种代表性布局加以 研究, 其一为典型布局; 其二为非典型布局, 这样很好地降低了问题的难度系数。 在算法上, 我们使用贪心选择方法将部站方案从求整体最优解分解为求一系列局 部最优解,根据宿主站与子站之间的连接关系,设计了一种树形数据结构,满足 宿主站最大连接数的为最优子结构。 通过构建这种局部最优, 即构建最优子结构, 规划出了模型中最多的最优子结构, 从而减少宿主站个数, 根据第一个目标函数 达到降低成本的目的,并得到最优的各站点类型。 针对挑战二, 设计的拓扑规划算法, 运行过程中对于可形成多种不同最优子 结构的站点, 计算站点之间距离来判断采用何种最优子结构。 可在以成本最低为 第一优先级下,优化路径,根据第二个目标函数将降低回传路径损耗,并得到最 优的站点拓扑连接关系。 利用我们的方案对模拟的整体站点分布模拟进行拓扑规划,计算得: 平均成本: =6.955 ; 系统平均损耗:PL=20.368; 算法效率: 1457ms; 站点规模: 1000 站点 结果表明我们的方案是优良的, 算法较好地完成了题目的挑战, 为今后该问题的 研究提供了新思路。 关键词:无线回传 贪心选择方法 最优子结构 图论 一问题重述 本题目通过对现有无线回传服务介绍, 在给定一个地区中候选站点的位置分 布的情况下,要求根据站点间的相互位置、站点间拓扑关系限制等条件,在满足 一定回传质量(仅要求宿主站与子站的距离满足某门限)的前提下,设计成本最 优的部站方案。 设计的算法输入为每个地区所有站点列表, 包括站点经纬度和站型, 各种站 型的综合成本,包括宿主站的综合成本、子站的综合成本和卫星设备综合成本。 在满足给定约束条件下,输出包含二维矩阵表示所有站点间的连接关系的 Graph.csv 文件和包含一维数组表示站点类型的 Posi.csv 文件。 算法效率要求在 5 分钟内对规模为 1000 左右站点进行拓扑规划。 算法应该在拓扑架构满足约束条件的前提下挑战更低的总体成本和更低的 回传路径损耗。 二问题分析 在通讯建设中,无线基站的布局是一项非常重要的内容。长期以来,由于种 种原因, 目前城区基站建设和农村网基站建设的规划大多缺乏科学性。 题中 Relay 无线回传方案则可以解决城区, 农网等场景下的传统传输方式不可达的问题, 同 时在部分场景下也可以代替微波,有效降低站高,节省加站费用。本文着力解决 的是根据站点间的互相位置、 站点间拓扑关系限制等条件, 设计成本最优的部站 方案。 确定候选站点站型及候选站点间的连接关系, 在拓扑架构满足约束条件的 前提下,挑战更低的总体成本和更低的回传路径损耗。 由于站点列表未给定,所以首先需模拟站点分布,站点分布从一般到特殊, 站点数量从少到多考虑。 对于输入分析,站点列表输入是经纬度表示,数据繁琐不直观,所以考虑到 整数规划, 用整数二维坐标代替经纬度, 简化距离求解, 将站点等效替代为质点, 在平面坐标系中表示, 可以忽略实际站点的体积及地形因素, 便于建立数学模型 和构建站点连接关系。 对于任务分析, 问题一确定候选站点是安装子站还是宿主站, 可作为宿主站 的候选站在满足限制条件的情况下连接数应趋近于可连接的最大值, 所以算法设 计应该遍历所有的候选站点,分析每一个候选站点作为宿主站的子站分布情况, 通过比较分布情况, 包括子站连接数, 连接距离以及不同先决条件下得出的总宿 主站数得出最优的候选宿主站, 根据第一个目标函数可知降低宿主站个数以达到 降低总体成本的目的。 问题二是确定候选站点间的连接关系, 由于候选站为宿主 站或子站的确定不同,导致不同的连接关系,在对于问题一的求解中,即确定哪 些候选站为宿主站时, 根据第二个目标函数可知通过站点间距离大小判断, 尽可 能的确定距离该宿主站最短的站点为该宿主站的子站, 形成最优的拓扑连接, 从 而使回传路径损耗最低。 三模型假设 (1)假设最低回传质量要求仅与宿主站及子站之间的距离有关。 (2)不考虑蝴蝶站的扇区覆盖方向。 (3)假设每个宿主站和子站都完好且传输能力都为最大值。 (4)假设回传路径损耗仅与两个站点之间的距离有关。 四定义与符号说明 1. * :第个站点; 2. * :距离第个站点小于等于 20 的站点数组; 3. * :距离第个站点小于等于 10 的站点数组; 4 :站点列表中所有的站点集合; 5. :宿主站的站点个数; 6. :子站的站点个数; 7. :卫星个数; 8. * :第个大于等于 10 ,小于等于 20 回传路径的长度; 9. * :第个小于等于 10 回传路径的长度; 10. :发射频率,单位为 MHz,这里默认采用 900MHz; 11. :平均成本; 12. :系统平均损耗; 五模型的建立与求解 一 站点分布模拟: 由于题目中没有实际给出候选站点的位置分布,所以首先需要进行站点分 布模拟,考虑到 1000 个左右的站点规模实际分布错综复杂,可以采用整体思想 法分析,根据站点的密集程度将整个站点分布分割出典型局部,通过对不同的 局部站点分布进行拓扑规划,来验证算法对整体站点分布中各种情况的适应 性,最后联系局部为整体,验证算法的正确性及算法效率。通过整体思想法找 出整体与局部的有机联系,从而在客观上合理的简化问题。 在问题分析中提到,运用整数规划和等效替代,将实际站点等效替代为质 点,利用二维坐标来模拟站点的经纬度,点与点联边表示距离,从而将实际问 题转化为数学模型。典型局部应能代表整体大部分的站点分布特点,首先应该 避免极端,例如站点距离足够远以至于每个站点必须都为宿主站,或站点距离 足够近以至于每个站点都可连接其他所有站,无须讨论拓扑关系等,最后根据 典型局部得出的算法也应能对极端情况得出相适应的拓扑规划。通过多次对整 体站点分布模拟情况,选出如下的典型局部。 图 1:典型局部站点分布 根据整数规划的典型局部站点分布坐标图,得出站点列表,包括站点序号 及其横纵坐标值。 图 2:站点分布序号 表一:站点序号及横纵坐标 二典型局部的拓扑规划 步骤一:计算各个站点可连接的站点集合 算法输入为站点列表,记 I = 1,2,320,21为所有站点集合,循环求 解*与其他所有站点的距离,可得到所有与*距离小于等于 20的站点序号, 存入数组*,并且将距离小于等于 10的站点序号存入数组*,例如4对应的 数组4中元素为2,3,6,7,10,5对应的数组5中元素为1。当将整个集 合 I 遍历完后可以得到每个站点的所有距离小于 20的站点集合,和距离小于 10的站点集合,即每个*都有一组相对应的*和*。 表二:各个站点对应的数组A,B 步骤二:寻找优先候选宿主站 根据第一个目标函数: = 10 + 5 + 50 + 给定站点列表,且: + = 21 = Ceil(/8) 得: = 10 + 5(21 ) + 50Ceil(k/8) 21 = 5 + 521 + 50Ceil(/8) 21 可知越小,越小,所以宿主站连接子站数应该尽量等于可连接子站数的 最大值 6,所以选择候选宿主站时,候选子站总数超过 6 的为优先候选宿主 站。 循环假设集合 I 中的每个站点为宿主站,当*为宿主站时,则*对应的数组 *中的站点可作为它的第一级候选子站,如4中的2,3,6,7,10可为4的 第一级候选子站。再遍历数组*中的所有站点,找出第一级候选子站各自对应 的数组B,其中的元素可作为*的第二级候选子站,5=1,H=nil, I=5,J=nil中的元素K和L可作为4的第二级候选子站。同理,第二级候 选子站对应的数组B中站点,可作为*的第三级候选子站。根据约束条件,每 个宿主站至多只能有三级子站。 从站点列表中得出可作为优先候选站点的是4,J,KL,KI,他们的可 连接站点拓扑关系: (1) (4) (5) (3) (2) 图 3:优先候选站点拓扑关系 步骤三:确定部分宿主站和子站 得出优先候选宿主站,4,J,KL,KI满足作为优先候选宿主站的条 件,即可连接子站数大于等于 6,首先从优先候选宿主站中确定宿主站和子 站,采用贪心选择,是指在对所求问题求解问题的整体最优解可以通过一系列 局部最优的选择达到。结合当前问题,想要的到最合适的拓扑关系图,可通过 拟合符合约束条件的最小站点分布,为最优子结构。满足约束条件的最优子结 构为下图五种情况: 图 4:最优子结构拓扑关系图 遍历优先候选宿主站的数据结构图,抓取在整个数据结构中只出现过一次 的站点,确定连接这个站点的候选宿主站为宿主站,并且命名此站点为该宿主 站的子站,图中K,5,L,I,J仅在以4为候选宿主站时出现,所以确定 4为宿主站且确定K,5,L,I,J为4的子站。假设此次选择可构成最优 子结构,即此宿主站可连接站点数大于等于 6,分析此子结构,运用反证法 知,K,5,L,I,J仅可与4连接, ,不定义4为宿主站,这些站点可连接 站点总数将小于 6,与最优子结构矛盾,所以4为宿主站的拓扑可构成最优子 结构。 步骤四:确定最优子结构 4的优先候选宿主站数据结构图不为最优子结构,根据上个步骤已确定 K,5,L,I,J为4的子站,由约束条件知宿主站的第一级子站数不超过 4,所以根据从剩余的可连接子站选择一个站点构成4的最优子结构。 第二个目标函数为: PL = 20* O * + 20* P * + + 20 + 32.5 可知不变的条件下,即第一个目标函数中C不变,站点间距离越短,回 传路径损耗越低。 计算H,KS确定距离较短的H为4的子站,构成4的最优子结构,同时删 减其他优先候选宿主站数据结构图中的H,确保站点不会被包含在多个最优子 结构中,即约束条件中任意子站最多只能归属一个宿主站。 返回步骤三,遍历下一个优先候选宿主站J的数据结构图,直至找出所有 的最优子结构。这里需要注意的是H已经确定为4的子站,删除H后,下一次 遍历J将不满足最优子结构的条件。 步骤五:寻找次优先候选宿主站 上述过程中,将得出可构成最优子结构的所有站点及其拓扑规划,缺省站 点则为可连接数小于 6 的站点,分析可知这些站点分布较分散,必为可独立进 行拓扑规划的子结构,根据步骤一计算出缺省站点中可连接站点数最多的站 点,确定次优先候选宿主站,根据其连接结构确定宿主站和子站。例如55无可 连接站点,故55只能为单独的宿主站。 以上步骤可得出对于典型局部的拓扑规划结果如下图所示: (6) 图 5:典型局部拓扑规划结果 三非典型局部拓扑规划 非典型局部考虑站点分布稀疏型与密集型两种。 稀疏型站点分布模拟情况如下图所示: 图 6: 稀疏型站点分布 稀疏型站点分布拓扑规划同样适用于典型局部的分析步骤,区别在于这种 分布无优先候选宿主站,无最优子结构,将直接遍历缺省站点。通过典型局部 分析的步骤一确定各个站点可连接站点集合,通过步骤五遍历缺省站点找出次 优先候选宿主站,根据第二个目标函数确定最短路径优先构建拓扑规划。得出 稀疏型站点分布的拓扑规划结果如下图所示: 图 7: 稀疏型站点分布拓扑规划结果 密集型站点分布模拟情况如下图所示: 图 8: 密集型站点分布 基于实际背景考虑,站点应该合理的分布在农村与城市中,农村网建设基 站符合稀疏型站点分布特点,城区建设基站符合典型局部站点分布特点,密集 型站点分布站点密度高,站点数目相同情况下服务覆盖面积小,在满足一定回 传质量的情况下总体成本高,与第一目标函数思想相悖,所以密集型站点分布 情况并不合理,故不变更算法思想以适应密集型站点分布情况。 四算法实现与检验 程序主要变量介绍 1.numW:卫星的个数 2.costW:卫星的成本 3.numS:宿主站的个数 4.costS:宿主站的成本 5.numZ:子站的个数 6.costZ:子站的成本 7.counter:记录总站数 8.Informationi:等于-1 时代表宿主站,等于 n(=1,2,3.)时表示 i 的宿主站位 n ti:记录 i 出现的次数 10.datai:表示第 i 个点的数据(点的坐标,及站型) 11.Iter:遍历第一级跳容器的指针 12.Iter1:遍历第二级跳容器的指针 13.Iter2:遍历第三级跳容器的指针 14.OnlyOne:保存候选宿主站中只出现一次的第一级跳和第二级跳的站点编号 15.iterOnlyOne:遍历 OnlyOne 容器的指针 16.counter1:计数第一级跳的个数 17.counter2:计数宿主站的子站总个数 18.pos1:宿主站与第一级跳之间距离最小的站点编号 19.pos2:第一级跳与第二级跳之间距离最小的站点编号 20.pos3:第二级跳与第三级跳之间距离最小的站点编号 程序主要功能函数介绍 1. void getDataFromCsv() /从 data.csv 文件中获取数据,并存入到 Data 结构 体中保存 2. void getDistance() /计算得到两个点之间的距离,并存入到 A 或者 B 中 保存 3. string getString() /将整数转换为字符串形式 4. void getType() /确定每个站点的站型以及其它站点的关系 5. void PrintToGraphCsv() /将每个站点的信息以及与其它站点的关系输出到 Graph.csv 文件中 6. void PrintToPosiCsv() /将每个站点的站型输出到 Posi.csv 文件中 总流程图及关键步骤流程图 图 9: 程序总流程图 典型局部输出检验及目标函数解: 图 10: 典型局部输入文件 图 11: 典型局部 Posi.csv 输出文件 图 12: 典型局部 Graph.csv 输出文件 经检验,程序输出的典型局部的站点类型与站点间连接关系与模型建立中 分析得到的结果一致,且计算得: 平均成本: =8.182 系统平均损耗:PL=28.596 算法效率: 41ms 站点规模: 22 站点 非典型局部(稀疏型)输出检验及目标函数解: 图 13: 典型局部输入文件 图 14: 典型局部 Posi.csv 输出文件 图 15: 典型局部 Graph.csv 输出文件 经检验,程序输出的稀疏型站点分布的站点类型与站点间连接关系与模型 建立中分析得到的结果一致,且计算得: 平均成本: =12.500 系统平均损耗:PL=36.932 算法效率: 13ms 站点规模: 10 站点 整体站点分布输出检验及目标函数解: 对模拟的整体站点分布模拟进行拓扑规划,计算得: 平均成本: =6.955 系统平均损耗:PL=20.368 算法效率: 1457ms 站点规模: 1000 站点 六模型的评价与推广 优点: (1) 对于合理的站点分布列表,此算法能较好的满足题中第一目标函数要求, 成本最低原则,且在成本最低原则下也将有更低的回传路径损耗。 (2) 算法采用从边缘到中心规划的拓扑规划,算法效率高,收敛速度快。 缺点: (1) 对于密集型的站点分布, 由于算法并未针对这种不合理的分布考虑, 所以 不能较好的进行拓扑规划。 (2) 算法确定最优子结构采用贪心选择方法,已确定的最优子结构不可回退, 每次选择都会影响以后的分布状态。 模型推广: 根据本文设计的拓扑算法不仅满足给定的约束情况, 且考虑降低成本为第一 优先级, 降低回传路径损耗为第二优先级, 可以适用于具有多级网络设备的拓扑 规划中,例如公共区域无线路由器布局规划,车联网信号接收站点布局规划等。 还可以运用于多级管束下的选址问题, 例如, 为连锁超市提供货物的仓库选址问 题, 为服装店提供服装的工厂店选址问题等, 在实际生活中有很强的实用性和通 用性。 七参考文献 1 方世昌,离散数学,西安:西安电子科技大学出版社,2009 年 2 Thomas H.Cormen、Charles E.Leiserson,算法导论,机械工业出版社,2006 年 3 Bjarne Stroustrup,C+程序设计语言,机械工业出版社,2010 年 3 月 4 徐俊明,图论及其应用,中国科学技术大学出版社,2010 年 3 月 5 彭军、向毅,数据结构与算法,人民邮电出版社,2013 年 八附录 一程序源代码 #include using namespace std; const int maxn = 1005; int Informationmaxn; int cntmaxn; int numS,numZ,numW; int costS,costZ,costW; struct Data int Id,Point_x,Point_y; list min20; list min10; vectorstor100; string name; /站的类型 int count_zi; data1005; int counter = 1; /从表里获取数据 void getDataFromCsv() ifstream fin(data.csv,ios:in); string line; while (getline(fin, line) /cout line buf) acnt + = buf; datacounter.Id = a0; datacounter.Point_x = a1; datacounter.Point_y = a2; counter +; /得到每两个点之间的距离 void getDistance() for (int i = 1;i counter; i+) for (int j = i + 1;j counter;j +) double dis = sqrt(datai.Point_x - dataj.Point_x) * (datai.Point_x - dataj.Point_x) + (datai.Point_y - dataj.Point_y) * (datai.Point_y - dataj.Point_y); if(dis = 20) datai.min20.push_back(j); dataj.min20.push_back(i); if (dis = 10) datai.min10.push_back(j); dataj.min10.push_back(i); string getString(int num) string temp = ; stack st; while (num) st.push(num % 10 + 0); num /= 10; while (!st.empty() temp.push_back(st.top(); st.pop(); return temp; void getType() /找到宿主侯选战 vectorvt; for (int i = 1;i 2) vt.push_back(i); / = 7 /* /遍历候选宿主站 1 6 8 15 for (int i = 0;i vt.size();i +) cout -; cout vti ; cout endl; */ /确定每个元素出现的次数 for (int i = 0;i vt.size();i +) list:iterator iter; for (iter = datavti.min20.begin();iter != datavti.min20.end(); iter +) cnt*iter +; list:iterator iter1; for (iter1 = data*iter.min10.begin();iter1 != data*iter.min10.end();iter1 +) cnt*iter1 +; list:iterator iter2; for (iter2 = data*iter1.min10.begin();iter2 != data*iter1.min10.end();iter2 +) cnt*iter2 +; /确定宿主站 for (int i = 0;i vt.size();i +) int temp = vti; if (Informationtemp != 0) continue; /需要重新判断候选站是否满足要求 setst1; list:iterator iter; st1.insert(temp); /有可能子站中有宿主站的编号需要排除 for (iter = datatemp.min20.begin();iter != datatemp.min20.end();iter +) if (Information*iter != 0) continue; st1.insert(*iter); list:iterator iter1; for (iter1 = data*iter.min10.begin();iter1!= data*iter.min10.end();iter1 +) if (Information*iter1 != 0) continue; st1.insert(*iter1); list:iterator iter2; for (iter2 = data*iter1.min10.begin();iter2 != data*iter1.min10.end();iter2 +) if (Information*iter2 != 0) continue; st1.insert(*iter2); if (st1.size() 1) / 7 /cout temp = temp endl; /如果之前的宿主侯选站作为别的宿主站子站, 需要将与之有关的点出现的次 数减一 list:iterator iter; for (iter = datatemp.min20.begin();iter != datatemp.min20.end();iter +) if (Information*iter != 0) continue; cnt*iter-; list:iterator iter1; for (iter1 = data*iter.min10.begin();iter1 != data*iter.min10.end();iter1 +) if (Information*iter1 != 0) continue; cnt*iter1 -; list:iterator iter2; for (iter2 = data*iter1.min10.begin();iter2 != data*iter1.min10.end();iter2 +) if (Information*iter2 != 0) continue; cnt*iter2 -; continue; list dis; list OnlyOne; = 宿主站; Informationtemp = -1; /得到宿主站中只出现一次的站点 list:iterator iter4; /遍历第一级跳 for (iter4 = datatemp.min20.begin();iter4 != datatemp.min20.end();iter4 +) if (Information*iter4 != 0) continue; if (cnt*iter4 != 1) / 2 3 12 /cout *iter4 ; dis.push_back(*iter4); else OnlyOne.push_back(*iter4); /第一级跳只出现一次的站 list:iterator iter5; /判断二级跳中指出先一次的点 for (iter5 = data*iter4.min10.begin();iter5 != data*iter4.min10.end();iter5 +) if(cnt*iter5 = 1) OnlyOne.push_back(*iter5); /如果是一级跳只出现一次,那么一定没有子节点,如果是二级跳只出现一次,那 么三级跳只能有一个 int counter1 = 0,counter2 = 0; /记录第一级跳的个数 he 第二级跳的个数 list:iterator iterOnlyOne; for (iterOnlyOne = OnlyOne.begin();iterOnlyOne != OnlyOne.end();iterOnlyOne +) if (data*iterOnlyOne.min10.size() /cout er ji tiao zhi chu xian yi ci *iterOnlyOneendl; data*iterOnlyO = 子站; int pre = data*iterOnlyOne.min10.front(); Information*iterOnlyOne = pre; = 子站; Informationpre = temp; list:iterator iter; for (iter = data*iterOnlyOne.min10.begin();iter != data*iterOnlyOne.min10.end();iter +) if (Information*iter != 0) continue; data* = 子站; Information*iter = *iterOnlyOne; Informationpre = temp; counter2 += 2; counter1 +; else /cout yi ji tiao zhi chu xian yi ci *iterOnlyOne endl; data*iterOnlyO = 子站; Information*iterOnlyOne = temp; counter1 +; counter2 +; /cout endl; /总个数也没达到要求,且第一级跳还有多余的,如果没有直接结束。 /cout counter1 = counter1 -dis = dis.size() -counter2 = counter2endl; while (counter1 4 dis.remove(paichu); continue; /排除了 3 int min_distance = 30,pos1 = 0,pos2 = 0,pos3 = 0; list:iterator iter; /遍历第一级跳的子站,找出距离最短的 for (iter = dis.begin();iter != dis.end();iter +) if (Information*iter != 0) continue; int dis = sqrt(datatemp.Point_x - data*iter.Point_x) * (datatemp.Point_x - data*iter.Point_x) + (datatemp.Point_y - data*iter.Point_y) * (datatemp.Point_y - data*iter.Point_y); / cout dis= dis -*iter *iter dis) min_distance = dis; pos1 = *iter; /cout dis = dis -pos = pos1endl; counter1 +; counter2 +; / 4 5 = 子站; dis.remove(pos1); Informationpos1 = temp; /cout pos1 = pos1 -counter1 = counter1 -counter2 = counter2endl; min_distance = 30; if (counter2 dis) min_distance = dis; pos2 = *iter1; /cout *iter2 = *iter1 - dis = dis - pos = pos2endl; counter2 +; = 子站; Informationpos2 = pos1; / cout pos2 = pos2 -counter1 = counter1 -counter2 = counter2endl; min_distance = 30; if(counter2 dis) min_distance = dis; pos3 = *iter2; counter2 +; data* = 子站; Informationpos3 = pos2; int findroot(int x) return Informationx = -1 ? x : Informationx = findroot(Informationx); /将数据输出到 csv 文件中 void PrintToGraphCsv() std:ofstream outfile(Graph.csv); string first = ,; for (int i = 1;i counter;i +) first += + getString(i) + ,; outfile first endl; for (int i = 1;i counter;i +) string other = ; other += + getString(i); for (int j = 1;j counter;j +) if (i = j) other += ,0; continue; if ( = 宿主站 else if (Informationi = j | Informationj = i) other += ,1; else other += ,0; outfile other endl; outfile.close(); void P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论