用邻接表实现某个点入度和出度
#include <cstdio> #include <cstring> #include <cctype> using namespace std; typedef struct node{//邻接表上的节点 int n; struct node * next; } GNode; typedef struct graph{//图的整个结构 int cn;//顶点个数 int bn;//边的个数 GNode *list;//顶点的数组相当于list[]; }Graph;// void Init(Graph *G,int cn,int b)//对图初始化 { G->list= new GNode[cn];// //G->list=(GNode *)malloc(sizeof(GNode)*cn); G->bn=b; G->cn=cn; for(int i=0;i<cn;i++) { G->list[i].n=i; G->list[i].next=NULL; } } int get_OutDegree(Graph *G,int o)// { int d=0; GNode *nde=G->list[o].next; while(nde) { d++; nde=nde->next; } return d; } int get_InDegree(Graph *G,int in)// { int d=0; int n=G->cn; for(int i=0;i<n;i++) { GNode *nde = G->list[i].next; while(nde) { if(nde->n==in) {d++;break;} nde =nde->next; } } return d; } void input(Graph *G) { int a,b; int n=G->bn; printf("输入所有的边\n"); while(n--) { scanf("%d%d",&a,&b);//输入边,存储邻接表用的头插入法。 GNode *T= new GNode(); T->n =b; T->next = G->list[a].next; G->list[a].next=T; } } int main() { int n,i,o,b; Graph *G= new Graph(); scanf("%d%d",&n,&b); Init(G,n,b); input(G); printf("请输入计算出度的点(0~~~n-1):\n"); scanf("%d",&o); printf("%d\n",get_OutDegree(G,o)); printf("请输入计算入度的点(0~~~n-1):\n"); scanf("%d",&i); printf("%d\n",get_InDegree(G,i)); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用