宽度优先搜索.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
宽度优先搜索概要

例2、数字变换(num.in/out/pas/cpp) 给定一个数N (O≤N≤100000),变成另一个数K(O≤K≤100000),允许的操作是乘以2,或者加减1,问最少要几步才能完成? 【输入格式】 仅有两个整数 N 和 K 【输出格式】 最少步数 【样例输入】 5?17 【样例输出】 4 bfs应用举例 bfs应用举例 5 4 10 6 8 3 7 9 12 11 20 16 2 14 18 13 22 19 17 15 部分状态空间树 BFS vs DFS 程序实现 例3、关系网络(relationship.???) 有n个人,他们的编号为1~n,其中有一些人相互认识,现在x想要认识y,可以通过他所认识的人来认识更多的人(如果a认识b、b认识c,那么a可以通过b来认识c),求出x最少需要通过多少人才能认识y。 输入: 第一行三个整数n、x、y;接下来一个n×n的邻接矩阵,a[i,j]=1表示i认识j,a[i,j]=0表示不认识。保证i=j时,a[i,j]=0,并且a[i,j]=a[j,i]。 输出: x认识y最少需要通过的人数。数据保证x一定能认识y 。 样例输入: 5 1 5 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 1 0 1 0 0 0 1 0 样例输出: 2 七、bfs应用举例 算法分析: 宽搜。 先设答案ans=0。把x加入队列并设置为队头元素,从队头开始进行宽搜,穷举邻接矩阵的第x行,看x认识谁(判断a[x,j]=1),认识的人(j)全部依次入队,并且ans:=ans+1,如果出现了y,则输出ans,结束搜索,否则,取出队头元素继续宽搜。 七、bfs应用举例 程序实现 bfs应用举例 * * 宽度优先搜索 走迷宫(Maze) 【问题描述】 已知一N×N的迷宫,允许往上、下、左、右四个方向行走,现请你找出一条从左上角到右下角的最短路径。 【输入数据】 输入数据有若干行,第一行有一个自然数N(N≤20),表示迷宫的大小,其后有N行数据,每行有N个0或1(数字之间没有空格,0表示可以通过,1表示不能通过),用以描述迷宫地图。入口在左上角(1,1)处,出口在右下角(N,N)处。所有迷宫保证存在从入口到出口的可行路径。 【输出数据】 输出数据仅一行,为从入口到出口的路径(有多条路径时输出任意一条即可请严格按照 下 上 左 右)。路径格式参见样例。 【样例输入】 4 0001 0100 0010 0110 【样例输出】(1,1)-(1,2)-(1,3)-(2,3)-(2,4)-(3,4)-(4,4) #includeiostream using namespace std; const int dx[5]={0,1,-1,0,0}; const int dy[5]={0,0,0,1,-1}; int a[20],b[20];int c[20][20]; int n; int main() { string s; int i,j; cinn; for (i=1;i=n;++i) { cins; for (j=0;js.length();++j) if (s[j]==0) c[i][j+1]=0; else c[i][j+1]=1; } dfs(1,1,1); } void print(int dep) { int i; for (i=1;idep;i++) cout(a[i],b[i])-; cout(a[i],b[i])endl; } void dfs(int dep,int x,int y) { int i,tx,ty; a[dep]=x; b[dep]=y; c[x][y]=1; if(x==ny==n) print(dep); else for (i=1;i=4;i++) { tx=x+dx[i]; ty=y+dy[i]; if (tx0tx=nty0ty=nc[tx][ty]==0) dfs(dep+1,tx,ty); } } 算法1:dfs 从左上角开始,找到下一个能走的路c[i][j]=0,然后dfs(i,j),(接着穷举i,j)下一个点继续dfs,直到找到出口位置。 算法2:bfs(宽度优先搜索)_利用队列实现 入队 出队 A1 A2 A3 A4 A5 A6 A1 A7 队列的概念 队列和栈一样,也是一种特殊的线性表; 队列是一种运算受到限制的线性表,插入操作限定在表的一端进行,称为

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档