实验三编写算法,依次输入顶点的数目、弧的数目、个顶点信息和各条弧的信息建立有向图的邻接表(已通过vc6.0)

更新时间:2023-06-30 15:24:16 阅读: 评论:0

#include <stdio.h>
#include <malloc.h>
#define True 1
#define Fal 0
#define MAX_VERTEX_NUM 20            /*最多顶点个数*/
int visited[MAX_VERTEX_NUM];  /*访问标志数组*/
typedef enum{DG, DN, UDG, UDN} GraphKind;  /*图的种类*/
typedef char VertexData;
typedef struct ArcNode
太和公{
    int adjvex;    /*该弧指向顶点的位置*/
    struct ArcNode *nextarc;    /*指向下一条弧的指针*/
}ArcNode;
typedef struct VertexNode
{
    VertexData data;        /*顶点数据*/
    ArcNode *firstarc;    /*指向该顶点第一条弧的指针*/
}VertexNode;
typedef struct
{
    VertexNode vertex[MAX_VERTEX_NUM]; 
    int vexnum,arcnum;              /*图的顶点数和弧数*/
户口分户申请书    GraphKind kind;                        /*图的种类标志*/
}AdjList;          /*基于邻接表的图(Adjacency List Graph)*/
int LocateVertex(AdjList *G,char v)    /*求顶点位置函数*/
{
    int j=-1,k;
    for(k=0;k<G->vexnum;k++)
        if(G->vertex[k].data==v)
        {
官换新机            j=k;
            break;
        }
        return(j);
}
void CreateAdjList(AdjList *G)  /*创建一个有向网*/
{
    int i,j,k,m;
    VertexData v1,v2;
    ArcNode *s;
    ArcNode *p;
皮蛋苋菜    printf("输入图的顶点数和弧数\n");
    fflush(stdin);
    scanf("%d,%d",&G->vexnum,&G->arcnum);
   
    for(i=0;i<G->vexnum;i++)
    {
        printf("输入图的顶点\n");
        fflush(stdin);
        scanf("%c",&G->vertex[i].data);/* 输入图的顶点*/
鼻塞流清鼻涕        G->vertex[i].firstarc=NULL;
网速限制    }getchar();
    for(j=1;j<=G->arcnum;j++)
    {
       
        printf("请输入项临街的两个节点");
       
        scanf("%c,%c",&v1,&v2);
        getchar();
        k=LocateVertex(G,v1);
        m=LocateVertex(G,v2);
        s=(ArcNode*)malloc(sizeof(ArcNode));
        p=(ArcNode*)malloc(sizeof(ArcNode));
        p->nextarc=NULL;
        s->nextarc=NULL;
        p->adjvex=k;
        s->adjvex=m;
        p->nextarc=G->vertex[m].firstarc;
        s->nextarc=G->vertex[k].firstarc;
        G->vertex[m].firstarc=p;
        G->vertex[k].firstarc=s;
    }
}
void DaYin (AdjList g)
{
    int i;
    ArcNode *p;
    for(i=0;i<g.vexnum;i++)
    {
        printf("%c",g.vertex[i].data);
        p=g.vertex[i].firstarc;
        while(p!=NULL)
    {
        printf("%d",p->adjvex);
        p=p->nextarc;
    }
    }
}
void DepthFirstSearch(AdjList g,int v0)  /*图g为邻接表类型AdjList */
{
    ArcNode *p;
    printf("%c",g.vertex[v0].data);
    visited[v0]=True;
    p=g.vertex[v0].firstarc;
    while(p!=NULL)
    {
        if(!visited[p->adjvex])
            DepthFirstSearch(g,p->adjvex);
        p=p->nextarc;
    }
}/*DepthFirstSearch*/
void TraverGraph(AdjList g)/*对图g进行深度优先搜索,Graph 表示图的一种存储结构,如数组表示法或邻接表等*/
{
    int vi;
    for(vi=0;vi<g.vexnum;vi++) 
        visited[vi]=Fal ;/*访问标志数组初始*/
    for(vi=0;vi<g.vexnum;vi++)    /*调用深度遍历连通子图的操作*/
        if (!visited[vi]) 
            DepthFirstSearch(g,vi);    /*若图g是连通图,则此循环调用函数只执行一次*/
大比例尺}/* TraverGraph */
void main()
人生是什么{
    AdjList G;
    CreateAdjList(&G);
    DaYin (G);
    TraverGraph(G);
}

本文发布于:2023-06-30 15:24:16,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1070427.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:顶点   数组   深度
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图