/*************************************************************************
File Name: dfs.cpp
Author: yubo
Mail: yuzibode@126.com
Created Time: 2014年04月19日 星期六 01时31分58秒
学习重点:
************************************************************************/
#include<cstring>
#include<cstdio>
#include<iostream>
#include<queue>
#include<stack>
using namespace std;
int map[100][100];
int vis[100];
void dfs(int start,int n){
int i;
stack<int>s;
memset(vis,0,sizeof(vis));
vis[start]=1;
printf("%d->",start);
for(i=1;i<=n;i++)
{
if(!vis[i]&&map[start][i]==1)//改变行列的顺序对结果无影响,
{
s.push(i);//入栈
vis[i]=1;//同时将入栈的元素标志为1,不可再访问
}
}
while(!s.empty()){
int ctop=s.top();
vis[ctop]=1;
printf("%d->",s.top());//在当前结点再次进行搜索,思路同上而已
s.pop();
for(i=1;i<=n;i++)
if(!vis[i]&&map[i][ctop]==1)
{
vis[i]=1;
s.push(i);
}
}
}
int main()
{
memset(map,1000,sizeof(map));
int i,n,s,t;
scanf("%d",&n);
while(1)
{
scanf("%d%d",&s,&t);
if(s==0||t==0)
break;
map[s][t]=map[t][s]=1;
}
dfs(1,n);
return 0;
}
File Name: dfs.cpp
Author: yubo
Mail: yuzibode@126.com
Created Time: 2014年04月19日 星期六 01时31分58秒
学习重点:
************************************************************************/
#include<cstring>
#include<cstdio>
#include<iostream>
#include<queue>
#include<stack>
using namespace std;
int map[100][100];
int vis[100];
void dfs(int start,int n){
int i;
stack<int>s;
memset(vis,0,sizeof(vis));
vis[start]=1;
printf("%d->",start);
for(i=1;i<=n;i++)
{
if(!vis[i]&&map[start][i]==1)//改变行列的顺序对结果无影响,
{
s.push(i);//入栈
vis[i]=1;//同时将入栈的元素标志为1,不可再访问
}
}
while(!s.empty()){
int ctop=s.top();
vis[ctop]=1;
printf("%d->",s.top());//在当前结点再次进行搜索,思路同上而已
s.pop();
for(i=1;i<=n;i++)
if(!vis[i]&&map[i][ctop]==1)
{
vis[i]=1;
s.push(i);
}
}
}
int main()
{
memset(map,1000,sizeof(map));
int i,n,s,t;
scanf("%d",&n);
while(1)
{
scanf("%d%d",&s,&t);
if(s==0||t==0)
break;
map[s][t]=map[t][s]=1;
}
dfs(1,n);
return 0;
}
结果如下图: