首页 > 其他分享 >2022-10-15 深搜

2022-10-15 深搜

时间:2022-10-15 13:46:09浏览次数:50  
标签:10 15 tx ty int dfs vis 2022 ma

 

深度优先搜索

深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。 属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。

 

 

 

 

 

 深搜的模板:

void dfs(int x,int y)
{
    if(搜索要满足的条件){相应的操作;return; }
    for(循环搜索的方向,即探寻下一步)
    {    根据当前的x,y得到下一步的坐标tx,ty
        if(对tx,ty做越界判断)continue;
        if(当前坐标vis[tx][ty]==0 && 下一步在地图上是可走的)
        {    vis[tx][ty] = 1;
            更新相应数据,如求和、步长等等
            dfs(tx,ty); 以tx,ty作为新的起点传入dfs中去寻找符合条件的下一步
            vis[tx][ty] = 0;
            将更新的数据回溯到未更新前,如步长-1,求和--等 
        }
    }
}

 

 

 

TZOJ 3286: Lake Counting

 

#include<bits/stdc++.h>
using namespace std;
char ma[1005][1005]; //地图 
int vis[1005][1005]; //标记数组,标记某点坐标是否已访问过 
int nex[8][2] = {{0,1},{1,0},{0,-1},{-1,0},{-1,1},{1,1},{1,-1},{-1,-1}}; //方向数组,表面搜索下一步的方向,这里为右下左上 
int n,m;
void dfs(int x,int y)
{
    for(int i=0;i<8;i++)
    {
        int tx = x+nex[i][0]; //下一步坐标tx = 当前坐标x+第i个方向的第0个数nex[i][0]
        int ty = y+nex[i][1];
        if(tx<1||tx>n||ty<1||ty>m)continue; //越界判断
        if(ma[tx][ty]=='W' && vis[tx][ty]==0)//如果第(tx,ty)个点是湖泊W,且在vis上没访问过
        {
            vis[tx][ty] = 1; //访问 
            dfs(tx,ty); //继续搜索 
        } 
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        cin>>ma[i][j];
        
            
    //以上是输入
    int ans = 0; //湖泊数
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            if(ma[i][j]=='W' && vis[i][j]==0) //如果第(i,j)个点是湖泊W,且在vis上没访问过
            {
                vis[i][j] = 1; //访问
                ans++; //湖泊数+1
                dfs(i,j);//将i,j相邻的所有湖泊搜索标记 
            } 
        } 
    cout<<ans;
     return 0;
}

 

 

 

TZOJ 4833: 选数

#include<bits/stdc++.h>
using namespace std;
int ma[105]; //地图 
int vis[105]; //标记数组,标记某点坐标是否已访问过 
int n,k,sum,ans,len;
void dfs(int x);
int prime(int n);
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>ma[i];
    //以上是输入
    dfs(1); //从0开始 
    cout<<ans;
     return 0;
}
void dfs(int x)
{
    if(len==k){
        if(prime(sum))ans++;
        return;
    }
    for(int i=x;i<=n;i++)
    {
        if(vis[i]==0)
        {
            sum+=ma[i];
            len++;
            vis[i] = 1;
            dfs(i+1);
            len--;
            vis[i] = 0;
            sum-=ma[i];
        }
    }
}
int prime(int n)
{
    if(n==1)return 0;
    for(int i=2;i*i<=n;i++)
        if(n%i==0)return 0;
    return 1;
}

 

标签:10,15,tx,ty,int,dfs,vis,2022,ma
From: https://www.cnblogs.com/jyssh/p/16794007.html

相关文章

  • 「CF1710D」Recover the Tree
    \(\texttt{「CF1710D」RecovertheTree}\)\(\texttt{Solution}\)考虑好区间\(I_1,I_2(I_1\capI_2\not=\empty)\),\(I_1\capI_2\)和\(I_1\cupI_2\)都是好区间。于......
  • 2022-10-15 闲话
    SeniorThreeishardtosurvivesoIdesignedasetencerecentlywrittenas"和过去与未来说拜拜,拥抱最后一个现在".Deathisnotabigdealtobehonest.Wait,J......
  • linux之用户 | 15
    用户&用户组创建用户:useradduser1删除用户:userdel-ruser1删除一个用户('-r'排除主目录)修改用户密码:passwduser1修改一个用户的口令(只允许root执行)创建一个新用......
  • Netty源码解读 2022.10.15
    netty:4.1.9.Final核心概念:-Channel通道,贯穿一切。-ChannelHandler处理通道事件或响应。-ChannelHandlerInitializer用来初始化一个ChannelHandler。-ChannelHandl......
  • 2022CCPC湖北省赛
    Bpotion题意:有一个容量仅在一半位置有刻度的量杯,有两类水,求最小接水步数使得杯子里面两类水的比例为x:y,或者输出无解。分析:找规律可以发现最终成立的话x+y一定是......
  • centos7.9 安装postgres15数据库
    1.安装yum仓库yuminstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm2.安装环境依赖(1).安装lib......
  • P4180 [BJWC2010] 严格次小生成树
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglongintn,m;longlongq=2000000000000000000;longlongsum=0;namespacekt{ structedge{ intx......
  • PostgreSQL 15 正式发布!工作负载、开发体验等方面有显著提升
       2022年10月13日-PostgreSQL全球开发组今天宣布发布 PostgreSQL15,这是世界上最先进的开源数据库的最新版本。 PostgreSQL15建立在最近版本的性能改......
  • 2022.10.03-D 宝石
    题意:初始有\(n\)种宝石,每种宝石有\(1\)颗。现在你要进行\(m\)次操作,每次等概率选择一个宝石,将其复制一遍。问最后数量最多的前\(k\)种宝石的期望数量。\(n,m,......
  • 2022.10.3-C 旅伴
    题意:有一棵大小为\(n\)的无标号无根树,其中有三种结点:红蓝黄。红色结点的度数最多为\(4\),蓝、黄结点的度数最多为\(3\)。黄色结点之间不能有直接连边。问方案数,\(\b......