图的应用之——图的连通

图的应用之——图的连通
题目描述

给定一个图的邻接矩阵,请判断该图是否是连通图。连通图:任意两个顶点之间都有路径。

–程序要求–
若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio
程序中若include多过一个头文件,不看代码,作0分处理
不允许使用第三方对象或函数实现本题的要求

输入

第1行输入一个整数k,表示有k个测试数据

第2行输入一个整数n,表示有n个结点

从第3行起到第n+2行输入一个邻接矩阵,其中Matrix[i,j]=1表示第i,j个结点之间有边,否则不存在边。

接下来是第2到第k个测试数据的结点数和邻接矩阵

输出

输出Yes or No表示图是否是强连通图

样例查看模式
正常显示
查看格式
输入样例1 <-复制
2
4
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
7
0 1 0 0 0 0 0
0 0 1 1 0 0 0
1 0 0 0 0 0 0
1 0 1 0 0 0 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 0 0 1 0 1 0

输出样例1
Yes
No

#include <iostream>
using namespace std;
int n;
int arr[100][100];
int v[100];
void dfs(int hang){
    v[hang]=1;
    for (int i = 0; i < n; ++i) {
        if(arr[hang][i]!=0&&v[i]==0)dfs(i);
    }
}
int go(){
    int f=0;
    for (int k = 0; k < n; ++k) {
        for (int i = 0; i < n; ++i) {
            v[i]=0;
        }int c=0;
        for (int i = k; i < n; ++i) {
            if(v[i]==0) {
                dfs(i); c++;
            }
        }
        for (int i = k-1; i >=0; --i) {
            if(v[i]==0){dfs(i);c++;}
        }
        f+=c;
    }return f;
}
int main(){
    int t;cin>>t;
    while (t--){
        cin>>n;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                cin>>arr[i][j];
            }
        }
        if(go()==n) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值