非递归实现
(1)栈S初始化;visited[n]=0;
(2)访问顶点v;visited[v]=1;顶点v入栈S
(3)while(栈S非空)
x=栈S的顶元素(不出栈);
if(存在并找到未被访问的x的邻接点w)
访问w;visited[w]=1;
w进栈;
else
x出栈;
- //图g以邻接矩阵为存储结构
- void DFS( int v)
- {
- cout << " v"<< v ;
- int top = -1 ;
- visited[v] = true ;
- stack[++top] = v ;
- while ( top != -1)
- {
- v = stack[top] ;
- for (int i = 0 ; i < MAX_NODE ; i++)
- {
- if (Matric[v][i] == 1 &&!visited[i])
- {
- cout << " v" << i ;
- visited[i] = true ;
- stack[ ++top ] = i ;
- break ;
- }
- }
- if( i == MAX_NODE)
- {
- top -- ;
- }
- }
- }
void Traver(AdjList g,vertype v)
//图g以邻接表为存储结构,算法从顶点v开始实现非递归深度优先遍历。
{struct arc *stack[];
visited[v]=1;printf(v); //输出顶点v
top=0; p=g[v].firstarc; stack[++top]=p;
while(top>0 || p!=null)
{
while (p)
if (p && visited[p->adjvex]) p=p->next;
else { printf(p->adjvex); visited[p->adjvex]=1;
stack[++top]=p; p=g[p->adjvex].firstarc;
}
if (top>0) {p=stack[top--]; p=p->next; }
}//外循环while
}//算法结束。