Bootstrap

BFS和DFS模板

/*BFS模板*/
/*maxn行maxn列的迷宫*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 100
int a[maxn][maxn];//存迷宫
bool book[maxn][maxn];//访问标记
int dir[4][2] = { 0,1,1,0,0,-1,-1,0 };//四方向的方向向量

struct note//队列中的数据结构
{
	int x, y;//坐标
	int tatal;//计数器
};

int main()
{
	//输入n,m,迷宫,起始位置等等
	queue<note>q;//声明队列
	note now, next;//两个状态
	note st;
	st.tatal = 0; //计数器清零
	q.push(st);//入队
	book[st.x][st.y] = 1;//访问标记
	while (!q.empty())//队列不为空时
	{
		now = q.front();//取队首元素进行扩展
		for (int k = 0; k < 4; k++)//枚举四个方向
		{
			next.x = now.x + dir[k][0];
			next.y = now.y + dir[k][1];
			//判断是否越界,用continue
			//判断是否满足条件或者是否走过
			if (满足条件)
			{
				next.tatal = now.tatal + 1;
				book[next.x][next.y] = 1;
				q.push(next);//新扩展点入队
			}
		}
		q.pop();//队首元素出队
	}
	return 0;
}
/*DFS模板*/
int dfs(int t)
{
    if(满足输出条件)
    {
        输出解;
    }
    else
    {
        for(int i=1;i<=尝试方法数;i++)
            if(满足进一步搜索条件)
            {
                为进一步搜索所需要的状态打上标记;
                search(t+1);
                恢复到打标记前的状态;//也就是说的{回溯一步}
            }
    }
}

 

;