/*深度优先搜索:
1、应该存放已访问过的结点在栈中,以便回溯
//我想错了,这里并不需要加入栈,因为我们用的是递归,
递归的本质就是一个栈吧~~
果然实践是检验真理的唯一标准
2、有visited[]数组标记是否访问过
*/
#include<iostream> #include<vector> using namespace std; int arr_list[100][100],visited[100],n,m; vector <int> v; void dfs(int k){ for(int i=1;i<=m;i++){ if(arr_list[k][i]==1&&visited[i]==0){//有边的话并且没有访问过的话 visited[i]=1; v.push_back(i); cout<<i<<" i"<<endl; dfs(i); } } } int main(){ int f,t; //n是边数,m是顶点数,默认为 1,2,3,....m while(cin>>n>>m){ memset(arr_list,0,sizeof(arr_list)); memset(visited,0,sizeof(visited)); for(int i=0;i<n;i++){ cin>>f>>t; arr_list[f][t]=1; } //假设从1开始 dfs(1); visited[1]=1; } return 0; }