首页 > 其他分享 >DFS与BFS

DFS与BFS

时间:2024-10-23 14:10:55浏览次数:1  
标签:idx int tt DFS BFS add

图论:
一、图中DFS与BFS
数和图的存储方式:
m与n^2一个级别属于稠密图,m与n一个级别则属于稀疏图,可以从题目中明显看出来
稠密图:邻接矩阵
稀疏图:邻接表

#include<bits/stdc++.h>
using namespace std;
const int N = 100100;
int m,n;
int h[N],e[N],ne[N],idx;
int q[N],d[N];
bool st[N],stt[N];
int dis[N];

void add(int a,int b){
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

void bfs(){             //默认源点是1,如果是其他点,就让stt[u]=true;q[++tt]=u;
    memset(st,false,sizeof st);
    int hh=0,tt=-1;
    stt[1]=true;
    q[++tt]=1;
    while(hh<=tt){
        int t=q[hh++];
        for(int i=h[t];i!=-1;i=ne[i]){
            int j=e[i];
            if(!stt[j]){
                q[++tt]=j;
                stt[j]=true;
            }
        }
    }
}

int dfs(int u){
    st[u]=true;
    for(int i=h[u];i!=-1;i=ne[i]){
        int j=e[i];
        if(!st[j]){
            dfs(j);
            st[j]=true;
        }
    }
}

//栈模拟的DFS
// int sa[N];
// void dfs(int u){
//     int tt=-1;
//     sa[++tt]=u;
//     st[u]=true;
//     while(tt!=-1){
//         int t=sa[tt--];
//         for(int i=h[t];i!=-1;i=ne[i]){
//             int j=e[i];
//             if(!st[j]){
//                 sa[++tt]=j;
//                 st[j]=true;
//             }
//         }
//     }
// }

bool topsort(){
    int hh=0,tt=-1;
    for(int i=1;i<=n;i++){
        if(!d[i]){
            q[++tt]=i;
        }
    }
    while(hh<=tt){
        int t=q[hh++];
        for(int i=h[t];i!=-1;i=ne[i]){
            int j=e[i];
            d[j]--;
            if(!d[j]){
                q[++tt]=j;
            }
        }
    }
    return tt==n-1;
}

int main(){
    cin>>m>>n;
    for(int i=1;i<=m;i++){
        int a,b;
        cin>>a>>b;
        add(a,b),add(b,a);
    }
    return 0;
}

标签:idx,int,tt,DFS,BFS,add
From: https://www.cnblogs.com/Minyou03/p/18496266

相关文章

  • HDFS 重要机制之 checkpoint
    核心概念hdfscheckpoint机制对于namenode元数据的保护至关重要,是否正常完成检查点是评估hdfs集群健康度和风险的重要指标editslog:对hdfs操作的事务记录,类似于wal,editlog文件以edits_开头,后面跟一个txid范围段,并且多个editlog之间首尾相连,正在使用的editl......
  • hadoop_hdfs详解
    HDFS秒懂HDFS定义HDFS优缺点优点缺点HDFS组成架构NameNodeDataNodeSecondaryNameNodeClientNameNode工作机制元数据的存储启动流程工作流程SecondaryNameNode工作机制checkpoint工作流程DataNode工作机制工作流程数据完整性文件块大小块太小的缺点块太大的缺点文......
  • dfs题目:平衡二叉树(java)
    平衡二叉树题目思路开始的error代码(最后一行return的地方有误)修正的代码题目链接:平衡二叉树题目题目思路用分治的思想,要想看看以root为根节点的二叉树是不是平衡二叉树,得看他的左子树和右子树是不是平衡二叉树,如果左子树和右子树都是平衡的,且root自己是平衡的......
  • .netcore 使用PdfSharpCore生成pdf
    想实现的功能是pdf+签名图片合并起来,后面看到了免费开源的PdfSharpCore. 先安装 publicstaticclassPdfSharpCoreHelper{privatestaticstringGetOutFilePath(stringname){stringOutputDirName=@".";return......
  • hdfs的分布式存储原理
    1.想要把一个大文件存储到hdfs,首先进行划分,将文件划分为一个一个的block,这个block默认为512MB,可修改.2.备份(也就是副本)将文件划分后,一个block丢失则原来的大文件没有用了.为了确保文件的安全性,hdfs提供了副本,也就是备份,将文件划分之后hdfs默认将每一个block备份到......
  • 【并查集+dfs】codeforces 1833 E. Round Dance
    题意输入一个正整数\(T(1\leqT\leq10^4)\),表示接下来输入\(T\)组测试用例,对于每一个测试用例:第一行,输入一个正整数\(n(2\leqn\leq2*10^5)\)第二行,输入\(n\)个正整数\(a_i(1\leqa_i\leqn)\),表示节点\(i\)到节点\(a_i\)存在一条有向边,保证无自环这\(n......
  • 01 bfs 学习笔记
    当一张图的边权只有\(0\)和\(1\)时,跑dij的堆优化显得比较累赘。因为只有两个取值,所以取\(0\)的时候在队列前面推进来,反之在后面。其他和dij没什么区别,时间复杂度\(O(m)\),其中\(m\)是边数。相关题目:P4554小明的游戏。点击查看代码voidwork(){ m0(vis);mem(di......
  • 二维 bfs 基础笔记
    一、寻找连通块1.基本思路找到一个未被走过的点,以这个点为起点,将与此点相连的所有点标记为走过,答案数\(+1\)2.代码实现#include<bits/stdc++.h>usingnamespacestd;structp{intx,y;};queue<p>q;intn,m,cnt;//最终答案为cntintdx[]={1,-1,0,0}......
  • hdfs集群的shell操作
    1.进程启停管理:一键启动hdfs集群: start-dfs.sh一键关闭hdfs集群: stop-dfs.sh单独控制进程启停:hadoop-daemon.sh(start|status|stop)(namenode|datanode|secondarynamenode)     或者hadoop--daemon(start|status|stop)(namenode|datanode......
  • 1601 添加运算符 枚举 递归dfs
    #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e3+10,inf=0x3f3f3f3f;inta[N],vis[N];intn,ans;//计算函数:根据运算符i对sum和a[x]进行运算intcal(intsum,inti,intx){if(i==1)returnsum+a[x];//加法......