DFS总结

dfs有别于BFS:一条路走到底,所以对于大数据的题目,剪枝对dfs来说十分关键。

写dfs的步骤:

1、思考参数们代表的状态

2、思考递归出口

3、思考如何剪枝

4、思考如何进入下一状态

 

模板:

const int MAXN=100

bool vis[MAXN],compress[10<<1];//compress,状态压缩

int wan[MAXN][MAXN];

void dfs(/*参数们*/)

{ 

    if(/*递归出口条件*/) 

    {

        //do sth

        return;

    }

    for(int i=1;i<=N;++i)  //递归入口

    {

        if(!vis[i])  //递归入口条件

        {
if(!compress[])
{ vis[i]
=1;
compress[]=1; dfs(); vis[i]
=0; //回溯
}
} } }

 

 

你可能感兴趣的:(DFS)