基础深度优先搜索

/*深度优先搜索:
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;
}

  

posted @ 2015-11-30 19:49  咸咸的告别  阅读(146)  评论(0)    收藏  举报