用邻接表实现某个点入度和出度

复制代码
#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));
}
复制代码

 

posted on   acmtime  阅读(2780)  评论(0编辑  收藏  举报

编辑推荐:
· 深入理解 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 构建精确任务处理应用
< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示