首页 > 其他分享 >7-2 邻接表存储实现有向网构建

7-2 邻接表存储实现有向网构建

时间:2022-11-14 13:46:02浏览次数:40  
标签:存储 int vertices ArcNode 构建 邻接 顶点 typedef

编程实现:以邻接表的存储方式,创建一个有向网,顶点为字符型。

输入格式:

第一行输入顶点个数和边的个数,中间用空格分开。下一行开始依次输入顶点,空格或回车分开。接着依次输入边依附的两个顶点和权值,空格分开。

输出格式:

若数据合理,则输出对应的邻接表形式,见样例,邻接点下标与权值空格分开。若顶点个数为0,则输出"error"。若顶点个数为1,边个数不合理,则输出"error"

输入样例:

在这里给出一组输入。例如:

4 4
a b c d
a b 1
a c 1
c d 1
d a 1
 

输出样例:

在这里给出相应的输出。例如:

a->2 1->1 1
b
c->3 1
d->0 1

#include<iostream>
using namespace std;
#define MVNum 1000
typedef char VerTexType;
typedef int ArcType;
typedef struct ArcNode           //边节点
{
    int adjvex;                  //边所指顶点位置
    struct ArcNode * nextarc;    //下一条边
    int info;
}ArcNode;
 
typedef struct VNode              //顶点
{
    VerTexType data;
    ArcNode *firstarc;             //该点的第一条指针
}VNode,AdjList[MVNum];             //AdjList表示邻接表类型

typedef struct                     //邻接表
{
    AdjList vertices;
    int vexnum,arcnum;             // 顶点数和边数
}ALGraph;

int LocateVex(ALGraph &G , VerTexType v)
{
    for(int i = 0 ; i < G.vexnum ; i++)
        if(G.vertices[i].data == v)
            return i;
}

void CreateUDG(int vnum,int anum,ALGraph &G)
{
   G.vexnum = vnum;
   G.arcnum = anum;
    
    for(int i = 0 ; i < G.vexnum ; ++i)
    {
        cin>>G.vertices[i].data;           //顶点
        G.vertices[i].firstarc = NULL;     //初始化表头
    }

    for(int k = 0 ; k < G.arcnum ; k++)
    {
        VerTexType v1,v2;
        cin>>v1>>v2;
        int i = LocateVex(G,v1);
        int j = LocateVex(G,v2);
        
        ArcNode *p = new ArcNode;                   //生成新节点
        p->adjvex = j;                     //邻接点序号
        p->nextarc = G.vertices[i].firstarc;
        cin>>p->info;
        G.vertices[i].firstarc = p;
    }
}

void show(ALGraph &G)
{
     for(int i=0 ; i<G.vexnum; i++)
     {
        cout<<G.vertices[i].data;
        ArcNode* p = G.vertices[i].firstarc;
        
        while(p!=NULL){
            cout<<"->"<<p->adjvex<<' '<<p->info;
            p=p->nextarc;
        }
        if(i!=G.vexnum-1) cout<<endl;
    }
}
int main()
{
    int vnum,anum;
    cin>>vnum>>anum;
    if(vnum == 0)
    {
        cout<<"error";
        return 0;
    } 
    if(vnum == 1 && anum > 0)
    {
        cout<<"error";
        return 0;
    }
    ALGraph G;
    CreateUDG(vnum,anum,G);
    show(G);
    return 0;
}

 

标签:存储,int,vertices,ArcNode,构建,邻接,顶点,typedef
From: https://www.cnblogs.com/fan-wang/p/16888776.html

相关文章