#include<string.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
const int MaxSize=100;
//深度优先
class Tree
{
private:
int visited[MaxSize];
int data[MaxSize][MaxSize];
int spot,vertex;
int str[MaxSize];
int num,front,area,d;
public:
Tree(int n,int m)
{
spot=n;
vertex=m;
visited[spot]={0};
num=front=area=d=0;
for(int i=0;i<spot;i++)
{
for(int j=0;j<spot;j++)
{
data[i][j]=0;
}
}
str[MaxSize]={0};
}
~Tree(){}
void build()
{
int index=-1;
int i,j;
while(++index<vertex)
{
cin>>i>>j;
data[i][j]=1;
data[j][i]=1;
}
}
void print(int v)//用递归的方法
{
visited[v]=1;
cout<<v<<" ";
for(int i=0;i<spot;i++)
{
if(data[v][i]==1&&visited[i]!=1)
{
print(i);
}
}
}
void push(int v)
{
if(!isfull())
{
str[front++]=v;
d=front;
num++;
}else{
cout<<"isfull"<<endl;
}
}
void pop()
{
if(!isempty())
{
cout<<str[area++]<<" ";
--num;
}else{
cout<<"isempty"<<endl;
}
}
bool isfull()
{
return num==MaxSize;
}
bool isempty()
{
return num==0;
}
int gettop()
{
return str[--d];
}
void DFS(int v)
{
visited[v]=1;
cout<<v+1<<" ";
push(v);
while(!isempty())
{
int flag=0;
v=gettop();
for(int i=0;i<spot;i++)
{
if(visited[i]!=1&&data[v][i]==1)
{
visited[i]=1;
push(i);
cout<<i+1<<" ";
flag=1;
break;
}
if(flag)
{
pop();
}
}
}
}
};
int main()
{
int spot,vertex;
cin>>spot>>vertex;
Tree p(spot,vertex);
p.build();
// p.print(0);
p.DFS(0);
}
#include<iostream>
#include<stdlib.h>
using namespace std;
const int MaxSize=100;
//深度优先
class Tree
{
private:
int visited[MaxSize];
int data[MaxSize][MaxSize];
int spot,vertex;
int str[MaxSize];
int num,front,area,d;
public:
Tree(int n,int m)
{
spot=n;
vertex=m;
visited[spot]={0};
num=front=area=d=0;
for(int i=0;i<spot;i++)
{
for(int j=0;j<spot;j++)
{
data[i][j]=0;
}
}
str[MaxSize]={0};
}
~Tree(){}
void build()
{
int index=-1;
int i,j;
while(++index<vertex)
{
cin>>i>>j;
data[i][j]=1;
data[j][i]=1;
}
}
void print(int v)//用递归的方法
{
visited[v]=1;
cout<<v<<" ";
for(int i=0;i<spot;i++)
{
if(data[v][i]==1&&visited[i]!=1)
{
print(i);
}
}
}
void push(int v)
{
if(!isfull())
{
str[front++]=v;
d=front;
num++;
}else{
cout<<"isfull"<<endl;
}
}
void pop()
{
if(!isempty())
{
cout<<str[area++]<<" ";
--num;
}else{
cout<<"isempty"<<endl;
}
}
bool isfull()
{
return num==MaxSize;
}
bool isempty()
{
return num==0;
}
int gettop()
{
return str[--d];
}
void DFS(int v)
{
visited[v]=1;
cout<<v+1<<" ";
push(v);
while(!isempty())
{
int flag=0;
v=gettop();
for(int i=0;i<spot;i++)
{
if(visited[i]!=1&&data[v][i]==1)
{
visited[i]=1;
push(i);
cout<<i+1<<" ";
flag=1;
break;
}
if(flag)
{
pop();
}
}
}
}
};
int main()
{
int spot,vertex;
cin>>spot>>vertex;
Tree p(spot,vertex);
p.build();
// p.print(0);
p.DFS(0);
}