zoukankan      html  css  js  c++  java
  • [图论]连通图:深搜(邻接矩阵)

    连通图



    Description

    判断一个图是否为一个边通图


    Input

    n 顶点 (n<=100)


    Output

    1 表示连通
    0 表示不边通


    Sample Input

    5
    1 2
    2 3
    5 4
    0 0


    Sample Output

    0


    解析

    本题解使用深搜(邻接矩阵),简单易解


    代码

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    int n,x,y=1,a[105][105],b[105]; //a是邻接矩阵,b是判断能不能从第一个点到达第x个点
    void dfs(int x){
    	b[x]=1; //标记
    	for(int j=1;j<=n;j++) //第一个点到第n个点,一个一个试能不能从第x个点到达
    	 if(a[x][j] and !b[j])dfs(j); //a[x][j]是判断第x个点能不能到达第j个点 !b[j]是判断有没有走过
    }
    int main(){
    	scanf("%d",&n); //读入n
    	while(x!=0 or y!=0){ //如果x和y都一个不为0,就一直读
    		scanf("%d%d",&x,&y);  
    		a[x][y]=1;a[y][x]=1; //因为是无向图,所以a[x][y]和a[y][x]都要标记为1
    	}
    	dfs(1); //从第1个点搜起
    	bool f=true;
    	for(int i=1;i<=n;i++) 
    	 if(!b[i]){f=false;break;}  //有一个点不能达到,先f=false,再直接终止循环
    	if(!f)printf("0"); //如果!f 就输出0
    	 else printf("1"); //不然就输出1
    	return 0;
    } 
    
  • 相关阅读:
    [HDU6793] Tokitsukaze and Colorful Tree
    [NOI2020]命运
    [NOI2020]美食家
    模拟9
    晚测2
    模拟8
    联考4
    模拟7
    模拟6
    关于数论
  • 原文地址:https://www.cnblogs.com/luojunhang/p/12300157.html
Copyright © 2011-2022 走看看