写一个DFS算法关于排列与组合的小例子便于理解
#include <iostream>
using namespace std;
int num[3] = {0};
void dfs(int index)
{
if (index == 3)
{
for (int i = 0; i < 3; i++)
{
cout<<num[i]<<" ";
}
cout<<endl;
return ;
}
for (int i = 1; i <= 3; i++)
{
num[index] = i;
dfs(index+1);
}
}
int main()
{
int k = 0;
dfs(0);
return 0;
}
输出
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3
2 3 1
2 3 2
2 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
3 3 3
另一个小例子,与第一个差不多
#include <iostream>
using namespace std;
int num[3] = { 0 };
bool visit[4] = { false };
void dfs(int index)
{
if (index == 3)
{
for (int i = 0; i < 3; i++)
{
cout << num[i] << " ";
}
cout << endl;
return;
}
for (int i = 1; i <= 3; i++)
{
if (!visit[i])
{
visit[i] = true;
num[index] = i;
dfs(index + 1);
visit[i] = false;
}
}
}
int main()
{
int k = 0;
dfs(0);
return 0;
}
输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1