题目:
从键盘输入无向图的邻接矩阵,判断输出该图结点最大度数、最小度数。
问题的分析:
对于一个图的输入,你一定会去使用二维数组来进行数据的存储,那么第一步就是建立一个二维数组,然后来进行输入,我下边用的是函数将我输入的二维数组传递给函数,在此注意的是啥呢?如果不用指针你的数组不一定将数值有效的传输过去,那么怎么样才可以去简单定义一次,然后都可以使用,全局数组这个最方便,自然考虑数组的长度,那就使用宏定义给个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 <stdio.h> #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) { t++; } } if(i==0) max = min = t; x++; cout << "V" << x << "的度是:" << t << "\n"; if (t >= max) { max = t; } if (t <= max) { min = t; } t = 0; } out(max, min); } void out(int max,int min) { cout << "在此无向图的邻接矩阵中\n"; cout << "该图结点最大度数为" << max << "\n"; cout << "该图结点最小度数为" << min << "\n"; }
欢迎提问一起共同学习