模板补充.docVIP

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
模板补充

目录 1.多边形的重心 1 2.广度优先搜索 2 3.拓扑排序 6 4.关键路径 8 5.最小生成树(prim) 12 6.Dijkstra算法求单源最短路径 15 7 .哈夫曼树得哈夫曼编码 17 8.最大团问题 19 9.二分图匹配 20 1.多边形的重心 三角形的重心: x = (xa+xb+xc)/3, y = (ya+yb+yc)/3;四边形的重心:作一对角线,将它分成两个三角形分别求出重心与面积 (x1,y1) ,s1 ; (x2, y2), s2 则该四边形的重心为: x = (x1*s1+x2*s2)/(s1+s2), y = (y1*s1+y2*s2)/(s1+s2); 五边形则分为一个三角形与一个四边形…… 任意多边形中直接取任一点(一般为原点)把多边形分为n-2个三角形 分别求重心 x=∑si*xi/∑si y=∑si*yi/∑si si为每块三角形的有向面积,这里说的是“有向面积”!无论是否为凸多边形,这个公式都是成立的。 /* 假设在n边形的内部有原点,则将n边形可分为n个三角形,又由于质量均匀的 分布在n边形的区域上,可用各点坐标的加权平均数求得重心;该算法可推广 到原点在n边形的外部用数学方法可以证明这里不再证明。算法模板实现如下: */ //p必须已按逆时针或顺时针排好序 point p[MAX]; point gravity(int n){ point p1, s; double tp, area = 0, tpx = 0, tpy = 0; p1.x = p[0].x; p1.y = p[0].y; for (int i = 1; i = n; ++i) { // point: 0 ~ n-1 s.x = p[(i == n) ? 0 : i].x; s.y = p[(i == n) ? 0 : i].y; tp = (p1.x * s.y - s.x * p1.y); area += tp / 2; tpx += (p1.x + s.x) * tp; tpy += (p1.y + s.y) * tp; p1.x = s.x; p1.y = s.y; } s.x = tpx / (6 * area); s.y = tpy / (6 * area); return s; } 2.广度优先搜索 #includequeue #includestack struct point {//-1表示向上,表示向下,表示向左,表示向右,表示遍历起点 //-2表示还未确定从那一点到该点;方向均相对于搜索遍历而言 int x,y; }; point create_node(int a,int b) { point L; L.x=a; L.y=b; return L; } //map存放地图(为输入参数),map1不为输入参数 char map[1010][1010],map1[1010][1010]; //每次均得初始化路径记录 int memo[1010][1010];//记录路径及有最后一节点索引路径 int n,m;//n表示行数,m表示列数 //p为终点,st为起点,该模板返回st-p的最短路径长度 int BFS(point p,point st) {//若返回路径长度为-1,表示起点和终点之间无路可通 int i,j; for(i=0;in;i++) { for(j=0;jm;j++) { map1[i][j]=map[i][j]; } } int path=0; queuepoint qu; qu.push(st); map1[st.x][st.y]=#; qu.push(create_node(-1,-1)); point temp; while(1) { if(qu.empty()) return -1; temp=qu.front(); if(temp.x==-1) { qu.push(temp); path++; qu.pop(); temp=qu.front(); } if(temp.x==p.xtemp.y==p.y) { return path; } qu.pop(); point* tp=temp; if(map1[temp.x][temp.y+1]!=#temp.y!=m-1) {//?#?号表示该处没有路可通(根据题意不同选用不同的符号) qu.push(create_node(temp.x,temp.y+1)); memo[temp.x][temp.y+1]=2; ma

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档