求各入度(邻接表)_邻接表入度-程序员宅基地

Problem Description

设有一有向图,其顶点值为字符型并假设各值互不相等,采用邻接表表示法存储表示。设计一个算法,求该图中所有顶点的入度值(要求按顶点的存储顺序输出)。

 Input

有多组测试数据,每组数据的第一行表示图的顶点数n和图的边数e(0<n<30);第二行表示各顶点的值,按输入顺序进行存储;接下来有e行,每一行表示每条边所依附的顶点的存储下标i和j,两个下标之间用空格隔开。

 Output

每组输出占一行,按顶点的存储顺序输出各顶点的入度值,要求每两个入度值之间有一空格。

 Sample Input

4 4
ABCD
0 1
0 3
1 2
1 3

 Sample Output

0 1 1 2
#include <iostream>
#include <stdlib.h>
#define maxvex 20
#include<stdio.h>
using namespace std;

typedef struct {
    int adjvex;

} ArcCell,ArcCells[maxvex][maxvex];

typedef struct {
    char vertex[maxvex];
    ArcCells arcs;
    int arcnum,vexnum;
} MatrixGraph;


struct ArcNode {
    int adj;
    ArcNode* next;
};

typedef struct {
    ArcNode* firstedge;
    char vex;
} Edge,Edges[maxvex];

typedef struct {
    Edges edges;
    int arcnum,vertexnum;
    int deg[maxvex];
} Graph;

void CreatDG(Graph&G,int n,int e) {
    G.arcnum=e;
    G.vertexnum=n;
    for(int i=0; i<n; i++) {
        cin>>G.edges[i].vex;
        G.edges[i].firstedge=NULL;
        G.deg[i]=0;
    }
    for(int i=0; i<e; i++) {
        int a,b;
        cin>>a>>b;
        ArcNode* p=new ArcNode;
        p->adj=b;
        p->next=G.edges[a].firstedge;
        G.edges[a].firstedge=p;
    }
}

void Deg(Graph& G) {
    for(int i=0; i<G.vertexnum; i++) {
        ArcNode* p=G.edges[i].firstedge;
        while(p) {
            G.deg[p->adj]++;
            p=p->next;
        }
    }

}

void Print(Graph G) {

    for(int i=0; i<G.vertexnum; i++) {

        ArcNode* p=G.edges[i].firstedge;
        while(p) {
            cout<<p->adj<<" ";
            p=p->next;
        }
        cout<<endl;
    }
}


void CreatUDM(MatrixGraph &G,int n,int e) {

    G.arcnum=e;
    G.vexnum=n;
    for(int i=0; i<G.vexnum; i++) {
        cin>>G.vertex[i];
        for(int j=0; j<G.vexnum; j++) {
            G.arcs[i][j].adjvex=0;

        }
    }



    for(int i=0; i<G.arcnum; i++) {
        int a,b;
        cin>>a>>b;
        G.arcs[a][b].adjvex=1;
        G.arcs[b][a].adjvex=1;
    }

}








bool vistited[maxvex];

void InitVistied() {

    for(int i=0; i<maxvex; i++) {
        vistited[i]=false;
    }
}



void MatrixDFSTraverse(MatrixGraph G,int v) {
    vistited[v]=true;
    cout<<G.vertex[v]<<":";
    for(int j=0; j<G.vexnum; j++) {
        if(G.arcs[v][j].adjvex!=0) {
            cout<<G.vertex[j];
        }
    }
    cout<<endl;
    for(int i=0; i<G.vexnum; i++) {
        if(!vistited[i]&&G.arcs[v][i].adjvex!=0) {
            MatrixDFSTraverse(G,i);
        }
    }


}

int main() {
   
    int n,e;

    while(cin>>n>>e) {
        Graph g;
        CreatDG(g,n,e);
        Deg(g);
        for(int i=0; i<g.vertexnum-1; i++) {
            cout<<g.deg[i]<<" ";
        }
        cout<<g.deg[g.vertexnum-1]<<endl;

    }
    return 0;
}




 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39993896/article/details/85729275

智能推荐

启动Tomcat的startup.bat-程序员宅基地

windows下想启动解压的tomcat的时候是直接运行startup.bat或者是去dos下运行startup.bat但是可能解压的tomcat包文件有问题,或者是包是从别人电脑上复制的,这种时候就容易造成启动时一闪而逝(就像闪电一样)那么我们就要从源头上了解tomcat运行startup的时候具体是怎么执行的.bat是批处理文件,里边内容基本类似dos命令(我是这么认为的),其中关...

Spring MVC –自定义RequestMappingHandlerMapping-程序员宅基地

在xml bean定义文件中使用<mvc:annotation-driven />配置Spring MVC时,在内部将一个名为RequestMappingHandlerMapping的组件注册到Spring MVC。 该组件或通常是HandlerMapping组件负责将请求URI路由到处理程序,这些处理程序是使用@RequestMapping注释进行注释的控制器方法。 Requ..._自定义handlermapping

985程序员心酸经历:毕业到现在没换过工作,月薪1万多该跳了-程序员宅基地

相信现在的年轻人们在刚刚踏入职场,首先会选择互联网科技大厂作为他们的第一个职业岗位,因为这些岗位受关注大、薪资待遇高,自然更有吸引力。可能我们身边都或多或少的有做程序员的朋友或者亲戚,他们的工资水平一直是我们大家津津乐道的话题,由于现在互联网的火爆,现在这些程序员们都拿着高于传统行业的待遇,着实让人羡慕,小编经常逛求职论坛会发现,在论坛中经常会有人晒出自己的工资,动辄几万起步的水平。不过凡事..._985程序员

阿里云整体架构_阿里云架构_dream_heheda的博客-程序员宅基地

目录阿里云发展历程阿里云技术架构地域和可用区阿里云发展历程阿里云技术架构阿里云产品架构:ACID+S阿里云解决方案结构:针对特定行业文中图片来自阿里云课程_阿里云架构

Fiddler抓包使用教程-QuickExec-程序员宅基地

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/73468287 本文出自【赵彦军的博客】 在 Fiddler 中自带了一个 QuickExec 命令行,用户可以直接输入并快速执行脚本命令。常见命令help打开官方的使用页面介绍,所有的命令都会列出来?列表中把包含 baid.com

Python自动化完成tb喵币任务_error: null root node returned by uitestautomation-程序员宅基地

2019双十一,tb推出了新的活动,商店喵币,看了一下每天都有几个任务来领取喵币,从而升级店铺赚钱,然而我既想赚红包又不想干苦力,遂使用python来进行手机自动化操作,目测全网首发!用到的库:reostime思路:下载adb命令安装包打开手机开发者选项(点击系统设置,连点5次系统版本,即可在辅助功能或其他选项中找到开发者选项,此功能无害,可不必关闭)在开发者选项中找到US..._error: null root node returned by uitestautomationbridge.

随便推点

WPF 向Grid中动态添加控件-程序员宅基地

private void Window_Loaded(object sender, RoutedEventArgs e){MyGrid.RowDefinitions.Add(new RowDefinition()); //添加行MyGrid.RowDefinitions.Add(new RowDefinition()); //添加行Button btn_Click

Android学习路线的归纳总结,绝对干货!-程序员宅基地

Android学习路线的归纳总结,绝对干货!

Centos7使用docke搭建openV_comp-lzo no-程序员宅基地

Background 公司目前没有VPN,有时在家办公只能通过向日葵或者TeamView来远程公司的电脑工作。最近自己搭了个openVPN服务器(使用的docker方式,方便快捷,另一种方式配置太麻烦了),具体搭建过程记录下。OpenVPN的工作原理 在Linux2.4版本以上,操作系统支持一个名为tun的设备,tun设备的驱动程序中包含两个部分,一部分是字符设备驱动,一部分是网卡驱动。网._comp-lzo no

3D游戏建模入门学习指南,揭秘高薪必备技能_游戏建模里的多媒体技术_金豆数据工程师的博客-程序员宅基地

接触过一些对3D建模感兴趣的年轻人,不管是在校生还是已经走向社会的,对这行都是既充满好奇,考虑入行,又瞻前顾后,纠结迷茫。还是有很多疑虑没有打消,左右着选择。今天就3D游戏建模这一行,我们系统地谈一下大家关心的几大问题。包括:学3D建模能干什么职业,行业薪资待遇,学习花费的时长和金钱,关于自学还是找老师带,该如何选择等。希望能够解决大家思想上困扰,缓解一些对未来的焦虑,找准自己的方向。一、关于职业:学了3D建模能干什么?学习3D建模能干很多的工作。中国的游戏动漫产业正处于一个快速发展的黄金时_游戏建模里的多媒体技术

NCL windows系统安装-程序员宅基地

http://www.doc88.com/p-192266283281.html NCL在Linux下的安装非常容易,只需下载适当版本的文件,设置好环境变量即可使用。NCL在Windows下的安装则要麻烦一些,需要先安装一个虚拟Linux环境(Cygwin/X)。本帖将按以下内容详细介绍NCL在Windows平台上的安装过程,希望仅具备Windows基本操作技能的用户也能轻松安装NCL。一..._ncarg idt