BFS,DFS伪代码

//bfs

#define queue_init  (head=tail=0)

#define queue_is_empty (head==tail)

#define en_queue(x)  (queue[tail++]=x)

#define de_queue  (queue[head++]) 

int head, tail;

类型 queue[MAX*MAX];     //队列中的元素类型可以是结构体,也可以基本类型(int, char等)

int vis[MAX][MAX];            //用于记录状态转移次数

 

int bfs()

{

    queue_init;

    en_queue(起点);

    while(!queue_is_empty) {

        p = de_queue;

        if p是终点

           return vis[p.x][p.y];

        计算 nextp

        if nextp 不合法

           continue;

        vis[nextp.x][next.y] = vis[p.x][p.y] + 1;  //记录nextp的状态转移次数

        en_queue(next);

    }

}
 
     

//dfs

void dfs(int x, int y, int d) //每次dfs回退时,需要恢复的值可以用参数管理

{

    if 结束条件

        计算ans     //ans最好是全局变量

    for(按顺序遍历)

    {

        计算next point

        if 不合法

           continue

        如果需要更新地图数组,在这里先备份,再更新

        dfs(next.x, next.y, d+1);

        恢复地图数组

    }

}  
 

 

posted @ 2017-01-13 13:00  wujixing909  阅读(2062)  评论(0编辑  收藏  举报