Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65459
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-08 19:09
文章分类
文章存档

2015年(115)

我的朋友

分类: C/C++

2015-08-06 16:42:32

习题22.3-6

重写DFS,利用一个栈来消除递归

pi[u]表示u的先辈域,color[u]表示u的颜色,d[u]表示访问u的时间戳,f[u]为完成u的时间时间戳


伪代码:


Stack stack = initStack();
int time = 0;
foreach (vertex u in V[G]){
    color[u] = WHITE;
    pi[u] = NIL;
}


foreach (vertex u in V[G]){
    color[u] = GRAY;
    push(stack, u);

    while (isNotEmpty(stack) && color[peak(stack)]!= BLACK ){
       vertex cur = peak(stack);
        time++;
        d[cur] = time;
        bool finished = true;
        foreach (vertex tmp in V[cur]){
            if(color[tmp] == WHITE){
               color[tmp] = GRAY;
               pi[tmp] = cur;
               push(stack, tmp);
               finished = false;
               break;
            }
        }
        if( finished == true){
                color[cur] = BLACK;
                time++;
                f[cur] = time;
                pop(stack);
        }
    }
}

       


阅读(174) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~