Create an undirected graph from the adjacency list

7-1 邻接表创建无向图

题目

采用邻接表创建无向图G ,依次输出各顶点的度。
输入格式:
输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。 输入第二行为顶点的信息,每个顶点只能用一个字符表示。 依次输入j行,每行输入一条边依附的顶点。
输出格式:
依次输出各顶点的度,行末没有最后的空格。
输入样例:
5 7
ABCDE
AB
AD
BC
BE
CD
CE
DE
输出样例:

2 3 3 3 3

代码

(初始化和创建书上都有,大部分都是chao的书上的,自己就写了一个求每个结点的度并输出而已)


#include<bits/stdc++.h>
using namespace std;

typedef struct ArcNode //边表结点
{
    int adjvex;// 邻接点域,存储该顶点对应的下标
    struct ArcNode *nextarc;// 链域,指向下一个邻接点
    //InfoType *info;

} ArcNode;

typedef struct VNode //顶点表结点
{
    char data;//顶点域,储存该顶点信息
    ArcNode *firstarc;//边表头指针

} VNode,AdjList[11];


typedef struct
{

    AdjList vertices;
    int vexnum,arcnum;//顶点数和边数



} ALGraph;

int Locate(ALGraph &g,char c)
{
    for(int i=0; i<g.vexnum; i++)
    {
        if(g.vertices[i].data==c)
            return i;
    }
    return -1;
}

int Creat(ALGraph &g)
{
    int adr1,adr2;//两个输入结点 的位置

    char c[11];
    char c2[3];
    ArcNode *a1,*a2;
    scanf("%d%d",&g.vexnum,&g.arcnum);//输入顶点数和边数
    scanf("%s",c);
    for(int i=0; i<g.vexnum; i++)
    {
        g.vertices[i].data=c[i];//顶点信息及将边表初始化为空
        g.vertices[i].firstarc=NULL;
    }
    getchar();

    for(int i=0; i<g.arcnum; i++) //创建边表
    {
        scanf("%s",c2);
        getchar();
        adr1=Locate(g,c2[0]);
        adr2=Locate(g,c2[1]);
        a1=new ArcNode;
        a1->adjvex=adr2;//临界序号为adr2
        a1->nextarc=g.vertices[adr1].firstarc;//将e的指针指向当前顶点上指向的结点
        g.vertices[adr1].firstarc=a1;//将当前的顶点指针指向e

        a2=new ArcNode;
        a2->adjvex=adr1;//临界序号为adr2
        a2->nextarc=g.vertices[adr2].firstarc;//将e的指针指向当前顶点上指向的结点
        g.vertices[adr2].firstarc=a2;//将当前的顶点指针指向e



    }






}

void pri(ALGraph &g)//
{
//    int sum[11]= {0};
//    ArcNode *p;
//    for(int j=0; j<g.vexnum; j++)
//    {
//        for(int i=0; i<g.arcnum; i++)
//        {
//            if(g.vertices[i].firstarc->nextarc->adjvex==g.vertices[j].firstarc->adjvex&&i!=j)
//            {
//                sum[j]++;
//            }
//        }
//    }
//
//
//
//    for(int i=0; i<g.vexnum; i++)
//    {
//        if(i==0)
//            cout<<sum[0];
//        else
//            cout<<" "<<sum[i];
//
//    }

    int cut;int sum[11]={0};
    ArcNode *p=NULL;
    for(int i=0;i<g.vexnum;i++)
    {

              cut=0;
              p=g.vertices[i].firstarc;
              while(p!=NULL)
              {
                  cut++;
                  p=p->nextarc;
              }
              sum[i]=cut;


    }
    for(int i=0;i<g.vexnum;i++)
    {
        if(i==0)cout<<sum[0];
        else
            cout<<" "<<sum[i];
    }


}



int main()
{

    ALGraph g;
    Creat(g);
    pri(g);






}

发布了18 篇原创文章 · 获赞 0 · 访问量 273

猜你喜欢

转载自blog.csdn.net/qq_42815711/article/details/102729475