ImageVerifierCode 换一换
格式:DOCX , 页数:91 ,大小:41.90KB ,
资源ID:14078978      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14078978.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ACM比赛模板Word文件下载.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ACM比赛模板Word文件下载.docx

1、 /inf 表无穷大 for (j = 0;j j +)/找出当前未在最小生成树中边权最小的顶点 if (!markj & disj matflagj) disj = matflagj; return sum; /返回边权总和prim算法(边表形式):struct Edge/frm为起点,to为终点,w为边权,nxt指向下一个顶点 / int frm; int to,w,nxt;edgeM;int visM,headM,disM;void addedge (int cu,int cv,int cw)/生成边的函数 /edgee.frm = cu; edgee.to = cv; edgee.w

2、= cw; edgee.nxt = headcu; headcu = e +; /edgee.frm = cv; edgee.to = cu; edgee.nxt = headcv; headcv = e +;int prim(int n,int sta) /n为顶点数量,sta为起点 int sum = 0; memset(dis,0x3f,sizeof(dis); memset(vis,0,sizeof(vis); for (i = headsta;i != -1;i = edgei.nxt)/遍历与sta点相连的所有顶点 int v = edgei.to; disv = edgei.w;

3、 vissta = 1; /加入到最小生成树中 int m = n - 1; /只生成n-1条边,所以循环n-1次 while (m -)i +)/找出当前边权最小的边visi&disi flag = i,min = disi; visflag = 1;/加入到最小生成树中 for (i = headflag;i = edgei.nxt) /更新与flag顶点相连的点的dis if (edgei.w disv)int main () e = 0; /记得初始化 memset (head,-1,sizeof(head); scanf (%d %d %d,&a,&b,&w); addedge(a,

4、b,w); . prim(n,sta); return 0;Kruskal算法:struct Edge int v1,v2,w;edgeM,treeM; /w为v1顶点到v2顶点的边权/ *int Find (int parent,int u)/第1种写法 int tmp = u; while (parentmp != -1) tmp = parenttmp; return tmp;*/int Find (int u) /第2种写法 if (u != parentu) parentu = Find(parenu); return parentu;bool cmp (Edge a,Edge b)

5、 return a.w b.w;int Kruskal()/parent表示集合 int parentM; int i,j,sum,vf1,vf2; sort(edge,edge+E,cmp); / memset (parent,-1,sizeof(parent);/对应第1种并查集的初始化/对应第2种并查集的初始化 parenti = i; sum = i = j = 0; while (i E & j N - 1)/生成的边数为N-1 vf1 = Find(parent,edgei.v1); /找这两个点的祖先 vf2 = Find(parent,edgei.v2); if (vf1 !=

6、 vf2) /若两个点的祖先不同,说明不在同一集合 parentvf2 = vf1;/把vf2点加到vf1点的集合中 treej+ = edgei;/把边加到tree数组中,这句题目没要求可忽略之 sum += edgei.w; /sum 加上其边权 i +;最小生成树 - Kruskal算法:运用数组存点与边的权值#include stdlib.halgorithm#define N 150using namespace std;int m,n,uN,vN,wN,pN,rN;int cmp(const int i,const int j) return wiwj;int find(int x

7、) return px=x?x:px=find(px);int kruskal() int cou=0,x,y,i,ans=0; for(i=0;in;i+) pi=i;m;i+) ri=i; sort(r,r+m,cmp);i+) int e=ri;x=find(ue);y=find(ve); if(x!=y) ans += we;px=y;cou+; if(coun-1) ans=0; return ans; int main() int i,ans; while(scanf(%d%dm,&n)!=EOF&m) scanf(%d%d%dui,&vi,&wi); ans=kruskal();

8、 if(ans) printf(%dn,ans); else printf(?n2.最短路算法DIJKC+代码 1.#defineinf0x3fffffff2.#defineM1053.4.intdistM,mapMM,5.boolmarkM;6.7.voidinit()8.9.inti,j;10.for(i=1;ii+)/i=j的时候也可以初始化为0,只是有时候不合适11.(jjj+)12.mapijinf;13.14.15.voiddijk(intu)16.17.j,mins,v;18.19.20.distimapui;21.markifalse;22.23.markutrue;24.distu0;/既然上面的map当i=j时不是0,就要这句25.while(1)26.27.mins28.29.if(!markjdistjmins)30.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1