#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stack>
#include <queue>
#define NODE_SIZE 100
typedef struct __GRAPH{
int n;
int e;
int matrix[NODE_SIZE][NODE_SIZE];
}Graph;
//使用栈 递归式深度优先遍历
void DFS_0(Graph g, int v0, bool* visit)
{
int i,j,k;
visit[v0] = true;
printf("visit %d\t",v0);
for(i =0; i <g.n; i++)
{
if(g.matrix[v0][i] != 0 && visit[i] == false)
{
DFS_0(g,i,visit);
}
}
}
//使用栈 非递归式深度优先遍历
void DFS(Graph g, int v0)
{
bool *visit = new bool[g.n];
int i,j,k;
for( i =0;i < g.n; i++)
{
visit[i] = false;
}
visit[v0] = true;
printf("visit %d\t",v0);
std::stack<int> s;
s.push(v0);
while(!s.empty())
{
int tmpNode,i;
tmpNode = s.top();
for(i =0; i <g.n; i++)
{
if(g.matrix[tmpNode][i] != 0 && visit[i] == false)
{
printf("visit %d\t",i);
visit[i] = true;
s.push(i);
break;
}
}
if(i == g.n)
s.pop();
}
}
//使用栈 非递归式广度优先遍历
void BFS(Graph g, int v0)
{
bool *visit = new bool[g.n];
int i,j,k;
for( i =0;i < g.n; i++)
{
visit[i] = false;
}
visit[v0] = true;
printf("visit %d\t",v0);
std::queue<int> s;
s.push(v0);
while(!s.empty())
{
int tmpNode,i;
tmpNode = s.front();
s.pop();
for(i =0; i <g.n; i++)
{
if(g.matrix[tmpNode][i] != 0 && visit[i] == false)
{
printf("visit %d\t",i);
visit[i] = true;
s.push(i);
}
}
}
}
int main()
{
int m, n;
while(scanf("%d %d",&n,&m)!= EOF)
{
Graph g;
g.n = n;
g.e= m;
int *dist = (int*)calloc(n,sizeof(int));
int *path = (int*)calloc(n,sizeof(int));
memset(g.matrix,0,sizeof(int)*NODE_SIZE*NODE_SIZE);
int s,t;//边的起点和终点
for(int i =0; i <m; i++)
{
scanf("%d %d",&s,&t);
if(g.matrix[s][t] > 0)
continue;
g.matrix[s][t]=i+1;
g.matrix[t][s]=g.matrix[s][t];
}
DFS(g,0);
printf("\nDFS_0: \n");
bool *visit = new bool[g.n];
for( int i =0;i < g.n; i++)
{
visit[i] = false;
}
DFS_0(g,0,visit);
printf("\nBFS_0: \n");
BFS(g,0);
}
}
5 5 0 1 0 2 2 4 4 1 1 3
原文:http://www.cnblogs.com/bigbigtree/p/3804288.html