数据结构与算法,图。

1.完成图的定义、存储、插入顶点、插入边、删除顶点和删除边等函
数的编写,已知一个有向图的顶点集V和边集G分别为:V={a,b,c, d,e,f};
E={<a,b>,<b,c>,<b,d>,<b, e>,<d, f>,<e, f>}。
编写一个函数,获得顶点元素所在的下标。函数原型为:int LocateVexM(MGraph *G
VertexType v)。
要求在主函数中实现对以上操作的调用,实现以下功能:
(1)编写程序建立该图的邻接矩阵存储(要求输入边时能直接输入边上两顶
点的值),并在该存储结构上实现该图的深度优先遍历和广度优先遍历。
(2)插入一个顶点g,输出图的广度优先遍历。
(3)插入边<c.g>,输出图的广度优先遍历。
(4)删除顶点 d,输出图的广度优先遍历。
(5)删除边<b,c>,输出图的广度优先遍历。

可以参考一下

#include <iostream>
using namespace std;
#define MaxInt 32767
#define MaxNum 100
#define MaxSize 100
bool visited[MaxNum];
typedef char VertexType;//顶点数据类型为字符型
typedef int ArcType;//边的权值为整形

typedef struct
{
    VertexType vexs[MaxNum];//定点表
    ArcType arcs[MaxNum][MaxNum];//邻接举证
    int vexnum, arcnum;//图的顶点和边数
}MGraph;
MGraph G;
typedef struct
{
    int *base;
    int front, rear;
}SQueue;
void InitQueue(SQueue & Q)
{//构造一个空队列Q并分配最大容量
    Q.base = new int[MaxSize];
    if (!Q.base)//分配失败
        exit(0);
    Q.front = Q.rear = 0;//头指针和尾指针为0,队列为空
}
void EnQueue(SQueue &Q, int e)
{//插入新元素e为Q的对位元素
    if ((Q.rear + 1) % MaxSize == Q.front)// //尾指针在循环意义上加1后等于头指针,表明队满
        return ;
    Q.base[Q.rear] = e;//新元素插入队尾
    Q.rear = (Q.rear + 1) % MaxSize;//队尾元素+1
}
void DEQueue(SQueue &Q, int &e)
{//删除Q的对头元素,用e返回其值
    if (Q.front == Q.rear)//元素为空
        return ;
    e = Q.base[Q.front];//保存对头元素
    Q.front = (Q.front + 1) % MaxSize;//对头指针+1
}
int QueueEmpty(SQueue &Q)
{
    if (Q.front == Q.rear)
        return 1;
    else
        return 0;
}
int LocateVex(MGraph G, int b)
{//判断顶点在第几个位置
    for (int i = 0; i < G.vexnum; i++)
        if (G.vexs[i] == b)
            return i;
}
void CreateUDN(MGraph &G)
{//采用邻接矩阵表示法创建无向网
    cout << "请输入顶点的个数:\n";
    cin >> G.vexnum;
    cout << "请输入边的条数:\n";
    cin >> G.arcnum;
    int v1, v2;
    cout << "依次输入顶点的信息:\n";
    for (int i = 0; i < G.vexnum; i++)
        cin >> G.vexs[i];
    for (int i = 0; i < G.arcnum; i++)
        for (int j = 0; j < G.arcnum; j++)
            G.arcs[i][j] = 0;
    for (int i = 0; i < G.arcnum; i++)
    {
        cout << "请输入一条边依附的顶点:";
        cin >> v1 >> v2;
        G.arcs[v1][v2] = 1;
        G.arcs[v2][v1] = 1;
    }
}
void DFS(MGraph G, int v)
{
    cout << G.vexs[v];
    visited[v] = 1;
    for (int i = 0; i < G.vexnum; i++)
        if ((G.arcs[v][i] ==1) && (visited[i]==0))
            DFS(G, i);
}
void BFS(MGraph G, int v)
{
    int Q[MaxSize];
    int front = -1, rear = -1;
    cout << G.vexs[v];
    visited[v] = 1;
    Q[++rear] = v;
    while (front != rear)
    {
        v = Q[++front];
        for (int j = 0; j < G.vexnum; j++)
        {
            if (G.arcs[v][j] == 1 && visited[j] == 0)
            {
                cout << G.vexs[j];
                visited[j] = 1;
                Q[++rear] = j;
            }
        }
    }
}
int main()
{
    CreateUDN(G);
    cout << "DFS:" << endl;
    DFS(G, 1);
    for (int a = 0; a < MaxNum; a++)
        visited[a] = 0;
    cout << "\nBFS:" << endl;
    BFS(G, 1);
    return 0;
}


我的数据结构里面有关于图的

数据结构和算法-图
https://blog.csdn.net/tianya_lu/article/details/124772622