图论算法1.pptVIP

  1. 1、本文档共50页,可阅读全部内容。
  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

BFS: int main(){ for(;;) { if(!(cinc1)) break; cind1c2d2; //输入起点、终点。 for(int i=0;i8;i++) for(int j=0;j8;j++)m[i][j]=0;//所有点都标记为“没走” proc(); } return 0; } #include iostream #include queue using namespace std; int d[8][2]={{1,2},{1,-2},{2,-1},{2,1}, {-1,2},{-1,-2},{-2,-1},{-2,1}}; int m[8][8];//给走过的点标记 char c1,c2,d1,d2; void proc(); void proc(){ int x,y,nx,ny,sx,sy,dx,dy,step=0; sx=c1-a;sy=d1-1; dx=c2-a;dy=d2-1; queue int tq; tq.push(sx);tq.push(sy);tq.push(step); m[sx][sy]=1; while (!tq.empty()){ x=tq.front(); tq.pop(); y=tq.front(); tq.pop(); step=tq.front(); tq.pop(); if(x == dx y == dy)break; for(int i=0;i8;i++){ nx=x+d[i][0];ny=y+d[i][1]; if(nx0 || nx = 8 || ny0 || ny = 8 ||m[nx][ny]) continue; tq.push(nx);tq.push(ny);tq.push(step+1); m[nx][ny]=1; } } coutTo get from c1d1 to c2d2 takes step knight moves.endl; } 初始点入队 取出队头元素 新点加入队尾 Knight Moves zoj(1091)程序实现 双向BFS a b c d e f g h 1 2 3 4 5 6 7 8 0 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 0 1 2 从起点、终点同时开始 双向BFS,有效地提高了时空效率。 从起点找2步能跳到的点 从终点找1步能跳到的点 DFS: pku2258 给无向图,求此图中的最长路径。要求路不能重复走,但节点可以重复地到达。如 输入 输出? //best用来记录最长路径的长度,gr[i][j]i到j的边长为1,以每一个结点为源点进行深搜 #includestdio.h #includememory.h int gr[25][25],best,n,m; void dfs(int p,int depth) //p为源点,depth为深度 { int i; bool flag=true; for(i=0;in;i++)//n-1个点 { if(gr[p][i]) { gr[i][p]=gr[p][i]=0; //表示该路已用过 dfs(i,depth+1); //以i为源点深层搜索 flag=false; gr[i][p]=gr[p][i]=1; //表不用该路 } } if(flag)//表示已经深搜到头没有路 { if(depthbest) best=depth; return; } } main() { int i,a,b; while(scanf(%d %d,n,m)!=EOF) { if(n==0m==0) break; best=0; memset(gr,0,sizeof(gr)); for(i=0;im;i++) { scanf(%d %d,a,b); gr[a][b]=gr[b][a]=1; } for(i=0;in;i++)//对每个点深搜 dfs(i,0); printf(%d\n,best); } } 青蛙(zju1942) 湖中

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档