|
![]() | 作者: taojuntjpp [taojuntjpp]
![]() |
登录 |
C语言描述的广度优先算法: int visit[MAX]; /*访问标记*/ int queue[MAX],front=0,rear=0; /*记录搜索线路队列,初始为空*/ main() { int num; num=creat(adjlist); /*建立图G的邻接表*/ breadfirst(adjlist,num); /*调用对图G广度搜索算法*/ } void breadfirst(NODE adjlist[],int num) /*邻接表adjlist[]中存储了有num个顶点的图*/ { int i; for(i=0;i<num;i++) visit[i]=0; /*给每个顶点一个未访问的标记*/ for(i=0;i<num;i++) if(visit[0]==0) bfs(i); /*调用以顶点vi为出发点广度搜索图G的算法*/ } void bfs(int v) { int w; NODE *p; visit[v]=1; printf("%d,",v); /*访问*/ enter(v); /*enter(v)为入队列函数*/ while((v=leave())!=NULL) /*leave()为出列函数*/ { p=adjlist[v].link; /*p指向出队列顶点v的第一个邻接点*/ while(p!=NULL) /*遍历v所指的整个链表*/ { w=p->vertex; /*取v的邻接点w*/ if(visit[w]==0) { printf("%d,",w); visit[w]=1; /*访问w顶点*/ enter(w); /*访问后,w进队列*/ } p=p->link; } } } 数据入列以后,怎么出列的? while((v=leave())!=NULL) /*leave()为出列函数*/ {} while()里面的表达式是什么意思呢,那个leave()函数是什么样的? 还有 int queue[MAX],front=0,rear=0; /*记录搜索线路队列,初始为空*/ 我感觉怎么没有用上,在整个的程序中,定义了它们有什么用呢? [此贴被 会上网的猪(taojuntjpp) 在 01月14日15时42分 编辑过] |
地主 发表时间: 05-01-14 15:41 |
![]() | 回复: 286 [unique] ![]() |
登录 |
你给出的只是个程序段,很多功能只是描述一下,比如leave(),只是说这个函数负责出列,具体实现还需要编写。 至于有些变量没写,可能与上下文有关吧。 |
B1层 发表时间: 05-01-14 16:01 |
![]() | 回复: ljsh012 [ljsh012] ![]() |
登录 |
你是在清华大学出版社那本书上写的程序吧,上面的都是类c程序,他只是程序段,要能编译通过必须再写其他的程序,你说的那个函数你去书的前面几页看看,他是否出现过。没有的话,好好理解程序自己也能写的。 |
B2层 发表时间: 05-01-14 17:13 |
![]() | 回复: taojuntjpp [taojuntjpp] ![]() |
登录 |
恩,谢谢啊~~ 学了后面忘了前面的了 我在书上找到了那个出队函数,差不多是弄懂了啊 谢谢哦~~~ 努力ing~~~ |
B3层 发表时间: 05-01-15 10:51 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号