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; //回溯
}
} } }

 

 

posted @ 2013-04-14 12:09  小仪在努力~  阅读(162)  评论(0)    收藏  举报