zoukankan      html  css  js  c++  java
  • BFS/DFS 模板 代码

    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    using namespace std;
    const int maxn=100;
    bool vst[maxn][maxn]; // 访问标记
    int dir[4][2]={0,1,0,-1,1,0,-1,0}; // 方向向量
    
    struct State // BFS 队列中的状态数据结构
    {
    	int x,y; // 坐标位置
    	int Step_Counter; // 搜索步数统计器
    };
    
    State a[maxn];
    
    boolCheckState(State s) // 约束条件检验
    {
    	if(!vst[s.x][s.y] && ...) // 满足条件		
    		return 1;
    	else // 约束条件冲突
    	return 0;
    }
    
    void bfs(State st)
    {
    	queue <State> q; // BFS 队列
    	State now,next; // 定义2 个状态,当前和下一个
    	st.Step_Counter=0; // 计数器清零
    	q.push(st); // 入队	
    	vst[st.x][st.y]=1; // 访问标记
    	while(!q.empty())
    	{
    		now=q.front(); // 取队首元素进行扩展
    		if(now==G) // 出现目标态,此时为Step_Counter 的最小值,可以退出即可
    		{
    			...... // 做相关处理
    			return;
    		}
    	for(int i=0;i<4;i++)
    	{
    		next.x=now.x+dir[i][0]; // 按照规则生成	下一个状态
    		next.y=now.y+dir[i][1];
    		next.Step_Counter=now.Step_Counter+1; // 计数器加1
    		if(CheckState(next)) // 如果状态满足约束条件则入队
    		{
    			q.push(next);
    			vst[next.x][next.y]=1; //访问标记
    		}
    	}
    	q.pop(); // 队首元素出队
    	}
     return;
    }
    
    int main()
    {
    ......
     return 0;
    }
    
    DFS:
    /*
    该DFS 框架以2D 坐标范围为例,来体现DFS 算法的实现思想。
    */
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    using namespace std;
    const int maxn=100;
    bool vst[maxn][maxn]; // 访问标记
    int map[maxn][maxn]; // 坐标范围
    int dir[4][2]={0,1,0,-1,1,0,-1,0}; // 方向向量,(x,y)周围的四个方向
    
    bool CheckEdge(int x,int y) // 边界条件和约束条件的判断
    {
    	if(!vst[x][y] && ...) // 满足条件
    		return 1;
    	else // 与约束条件冲突
    		return 0;
    }
    
    void dfs(int x,int y)
    {
    	vst[x][y]=1; // 标记该节点被访问过
    	if(map[x][y]==G) // 出现目标态G
    		{
    		...... // 做相应处理
    		return;
    		}
    	for(int i=0;i<4;i++)
    	{
    		if(CheckEdge(x+dir[i][0],y+dir[i][1])) // 按照规则生成下一个节点
    			dfs(x+dir[i][0],y+dir[i][1]);
    	}
    	return; // 没有下层搜索节点,回溯
    }
    int main()
    {
    ......
    return 0;
    }
    



  • 相关阅读:
    SSIS数据同步实践
    不同实例下同构表数据同步验证
    Performance Analysis of Logs (PAL) Tool
    scrapy框架_3持久化存储
    scrapy框架_2数据解析案例_最新糗事百科案例
    scrapy框架_简单基础命令操作
    Selenium 模块3经典案例_规避检测_js写入破解服务器Selenium识别 模拟登陆12306登陆
    Selenium 模块2_iframe处理_动作链
    Selenium 模块
    Flask_模板
  • 原文地址:https://www.cnblogs.com/ainima/p/6331207.html
Copyright © 2011-2022 走看看