离散数学-用以图转化为矩阵并且求出这个矩阵的最大度最小度

题目:

从键盘输入无向图的邻接矩阵,判断输出该图结点最大度数、最小度数。

问题的分析:

 对于一个图的输入,你一定会去使用二维数组来进行数据的存储,那么第一步就是建立一个二维数组,然后来进行输入,我下边用的是函数将我输入的二维数组传递给函数,在此注意的是啥呢?如果不用指针你的数组不一定将数值有效的传输过去,那么怎么样才可以去简单定义一次,然后都可以使用,全局数组这个最方便,自然考虑数组的长度,那就使用宏定义给个N随便一个长度1024,然后就去调用函数func,记得哈这个是二维数组,你的int arr[N][N]或者这样int arr[][N]这样在函数的调用都是有作用的,其实到这就已经没有main函数什么事了,下一个就是func函数,你的目的是去计算度,那么怎么判断度呢,如下

 发现了什么,比如说你的v1的度是:2 v2呢? 3 然后观察这个图,竖着看,但凡是1 的则都是度,那么思路就来了无非去看有几个1 不是,那么再一想你是在每一行中进行,所以你在外层循环中那么你的计数t当然是在外边了,还有你要求 max和min 既然求这个n个货的,那么你的第一行就是v0的度要是最大值和最小值 ,然后你就成功了一大步,接下里是干嘛呢因为t要不断计数,所以记为0 方便重新开始,其实就结束了,我在最后又调用了函数,因为我可以有一个输出函数,那么输出就会传入两个函数,分别是最大值和最小值。

总结

  • 使用二维数组来进行数值的存储
  • 建立三个0值 max min t(计算度值)
  • 初始时 max = min = v0的度
  • 在外层循环进行
  • 传递参数来输出
  • return 0
  • #include <iostream>
    #include<cstring>
    using namespace std;
    #define N 1001 //宏定义
    void das(int arr[][N], int n);
    void out(int max, int min);
    int arr[N][N], n;
    int main()
    {
        cout << "请输入矩形的阶数:"; 
        cin >> n;
        cout << "输入" << n << "行" << n << "列的数据值:\n";
        for (int i = 0; i < n; i++) {  
            for (int j = 0; j < n; j++) {
                cin >> arr[i][j]; 
            }
        }
        das(arr, n); 
        return 0;
    }
    void das(int arr[][N], int n)
    {
        int max = 0, min = 0, t = 0, x = 0; 
        for (int i = 0; i < n; i++) { 
            for (int j = 0; j < n; j++) {
                if (arr[i][j] != 0) {
                    if (arr[i][j] == 1)
                        t++;
                    else
                        t += 2;
                }
            }
            if (i == 0)
                max = min = t; 
            x++;
            cout << "V" << x << "的度是:" << t << "\n";
            if (t >= max) {
                max = t;
            }
            if (t <= min) {
                min = t;
            }
            t = 0; 
        }
        out(max, min);
    }
    void out(int max, int min) {
        cout << "在此无向图的邻接矩阵中\n";
        cout << "该图结点最大度数为" << max << "\n";
        cout << "该图结点最小度数为" << min << "\n";
    }
    

     

  • 欢迎提问一起共同学习

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i-阿松!

请给我一毛钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值