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