论坛: 编程破解 标题: 数据结构的问题(C语言版本) 复制本贴地址    
作者: 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号