类似于层序遍历,用一个队列非递归实现
#include <iostream>
#include <vector>
#include <stdio.h>
#include <memory.h>
#include <queue>
using namespace std;
int visited[9];
vector < vector <int> > v(10);
queue <int> q;
int main()
{
v[1].push_back(2);
v[1].push_back(3);
v[2].push_back(1);
v[2].push_back(4);
v[2].push_back(5);
v[3].push_back(1);
v[3].push_back(6);
v[3].push_back(7);
v[4].push_back(2);
v[4].push_back(8);
v[5].push_back(2);
v[5].push_back(8);
v[6].push_back(7);
v[6].push_back(3);
v[7].push_back(3);
v[7].push_back(6);
v[8].push_back(4);
v[8].push_back(5);
memset(visited,0,sizeof(visited));
for(int i=1;i<=8;i++)
{
if(!visited[i])
{
visited[i]=1;
cout<<i<<endl;
q.push(i);
while(!q.empty())
{
int j=q.front();
q.pop();
for(int k=0;k<v[j].size();k++)
{
if(!visited[v[j][k]])
{
cout<<v[j][k]<<endl;
visited[v[j][k]]=1;
q.push(v[j][k]);
}
}
}
}
}
return 0;
}