// DFS.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stack"
#include "stdio.h"
#include "iostream"
#include "vector"
using namespace std;
vector<int> vec;
vector<int> vec2;
stack<int> s;
void DFS(int i);
void DFS2();
int _tmain(int argc, _TCHAR* argv[])
{
//DFS(0);
//vec[0] = 5;
for (int i = 0;i<5;i++)
{
vec.push_back(i+1);
}
DFS2();
system("pause");
return 0;
}
void DFS2()
{
if (vec2.size() == 5)
{
for (int i = 0; i<vec2.size();i++)
{
printf("%4d", vec2[i]);
}
printf("\n");
}
else
{
for (int i=0;i<vec.size();i++)
{
int t = vec[i];
s.push(t);
vec2.push_back(t);
//vec.erase(vec.begin()+i);
DFS2();
s.pop();
vec2.pop_back();
//vec.insert(vec.begin()+i,t);
}
}
}
元素处理,在上面的代码中被注释掉了,也就是说,每个元素在遍历的时候可以被多次遍历到。这样就会输出 1 1 1 1 1 或者 5 5 5 5 5 这样的结果。
之所以会出现这样的结果,是因为,在每次深度优先遍历的时候,递归调用函数的时候, i 总是为0, 这样,就会出现5次递归调用,都是1入栈,然后到达递归调用的返回条件,输出 1 1 1 1 1, 返回到上一层调用后,i 变为 1, 这样2入栈,就会再次达到递归结束条件,输出 1 1 1 1 2.
直到递归调用五次,到 1 1 1 1 5 后,递归返回倒数第3层,这个时候 栈中元素为1 1 1, 这个时候i 更新为1,这样2入栈, 栈中元素变为 1 1 1 2, 然后重新进行深度优先递归遍历。
到最后, i 为4, 5入栈,每一层的递归调用 i 都为5,最后输出 5 5 5 5 5