//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] + ; //记录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+);
恢复地图数组
}
}