假设用一个 n×n 的数组 a来描述一个有向图的邻接矩阵:
(1)编写一个函数确定一个顶点的出度
(2)编写一个函数确定一个顶点的入度
(3)编写一个函数确定图中边的数目
输入格式
第一行:节点总数 n、指定节点 m。
下面n行:有向图的邻接矩阵
输出格式
第一行包括三个数据:节点编号 m、m 的出度、m 的入度(之间用一个空格隔开)。
第二行包括一个数据:图中边的总数。
数据范围
1≤n,m,a[i][j]≤1000 。
样例输入
5 3
0 4 2 2 3
2 0 1 5 10
2 0 0 4 0
0 3 7 0 7
6 2 0 0 0
样例输出
3 2 3
15
知识点补充:
下图中无向图G 5 和有向图G 6 的邻接矩阵分别为A1 和A 2 。

带距离的邻接矩阵:
代码:
#include<iostream>
using namespace std;
int main(){
int n ,m;
cin>>n>>m;
int **arr =new int*[n];
for (int i = 0; i < n; i++)
{
arr[i] = new int[n];
for (int j = 0; j < n; j++)
{
cin>>arr[i][j];
}
}
int chu=0,ru=0,total=0;
for (size_t i = 0; i < n; i++)
{
if (arr[m-1][i]>0)
{
chu++;
}
if (arr[i][m-1]>0)
{
ru++;
}
for (int j = 0; j < n; j++)
{
if (arr[i][j]>0)
{
total++;
}
}
}
cout<<m<<" "<<chu<<" "<<ru<<endl;
cout<<total<<endl;
}
#include<bits/stdc++.h>
#define MaxVertexNum 100 //最大顶点
#define INFINITY 65535 // ∞设为双字节无符号整数的最大值65535
using namespace std;
typedef int Vertex; //用顶点下标表示顶点,为整型
typedef int WeightType; //边的权值
typedef char DataType; //顶点储存的数据类型
typedef struct ENode *PtrToENode;
struct ENode{
Vertex V1,V2; //有向边<V1,V2>
WeightType Weight; //权重
};
typedef PrtToENode Edge; //图结点的定义
typedef GNode *PtrToGNode;
struct GNode{
int Nv; //顶点数
int Ne; //边数
WeightType G[MaxVertexNum][MaxVertexNum]; //邻接矩阵
DataType Data[MaxVertexNum]; //存顶点的数据
//注意:很多情况下,顶点无数据,此时Data[]可以不用出现
};
typedef PtrToGNode MGraph; //以邻接矩阵存储的图类型
MGraph CreatGraph(int VertexNum){
/* 初始化一个有VertexNum个顶点但没有边的图 */
Vertex V,W;
MGraph Graph;
Graph = (MGraph)malloc(sizeof(struct GNode));
Graph->Nv = VertexNum;
Graph->Ne = 0;//初始化邻接矩阵,这里默认顶点编号从0开始,到(Graph->Nv-1)
for(V = 0; V<Graph->Nv; V++){
for(W = 0; W<Graph->Nv; W++){
Graph->G[V][W] = INFINITY;
}
}
return Graph;
}
void InsertEdge(MGraph Graph,Edge E){
//插入边<V1,V2>
Graph->G[E->V1][E->V2] = E->Weight;
//若是无向图,还要插入边<V1,V2>
//Graph->G[E->V2][E->V1] = E->Weight;
}
MGraph BuildGraph(){
MGraph Graph;
Edge E;
Vertex V;
int Nv,i;
scanf("%d",&Nv);//读入顶点个数
Graph = CreatGraph(Nv);//初始化有nv个顶点但没有边的图
scanf("%d",&(Graph->Ne));//边数
if(Graph->Ne != 0){
E = (Edge)malloc(sizeof(struct ENode));
//建立边结点,读入边,格式化为“起点 终点 权重”,插入邻接矩阵
for(i = 0; i<Graph->Ne; i++){
scanf("%d %d %d",&E->V1,&E->V2,&E->Weight);
//注意如果权重不是整型,%d要改
InsertEdge(Graph , E);
}
}
for(V = 0; V<Graph->Nv; V++){
scanf("%c",&(Graph->Data[V]));
}
return Graph;
}
因上求缘,果上努力~~~~ 作者:别关注我了,私信我吧,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/12683070.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人