图的深度优先遍历
采用邻接矩阵表示图的方法,递归实现。
栈的使用:
头文件:<stack>
s.empty():栈空则返回true,否则返回false
s.top():返回栈顶元素,不删除该元素
s.push():压栈
s.pop():删除栈顶元素,无返回值
使用栈的时候参考了以下文章:
http://blog.csdn.net/zhy_cheng/article/details/8090346
下面是代码:
#include<iostream>
#include<stack>
#define M 11
using namespace std;
int graph[M][M] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0,
0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0,
0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1,
0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0
};
int visited[M];
//总共有m个点,从第i个点开始遍历
void dfs(int k, int m)
{
stack <int> s;
s.push(k);
visited[k] = 1;
while(!s.empty())
{
int top = s.top();
cout << top << endl;
s.pop();
for(int i = 1;i <= m; i++)
{
if(visited[i]==0 && graph[top][i])
{
dfs(i,m);
}
}
}
}
int main()
{
dfs(1,10);
return 0;
}