Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1002723
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: C/C++

2013-02-21 16:54:59

习题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);
        }
    }
}

       


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