首页 > 其他分享 >最后的图

最后的图

时间:2023-11-24 22:33:39浏览次数:27  
标签:typedef return int 最后 MaxSize printf Ver

#include <stdio.h> 
#include <stdlib.h> 
#define MaxSize 20

typedef int VertexType;
typedef int EdgeType;
typedef int Elem ;

typedef struct{                        //邻接矩阵 
    VertexType Vex[MaxSize];
    EdgeType Edge[MaxSize][MaxSize];
    int vernum,edgenum;
}MGraph;
                                        //邻接表 
typedef struct ArcNode{        //边表 
    int adjvex;                //边表中是顶点号!! 
    struct ArcNode *next;
}ArcNode;

typedef struct VNode{        //主表 
    Elem num;                //主表中是顶点值!! 
    struct ArcNode *first; 
}VNode,AdjList[MaxSize];

typedef struct{                    
    AdjList Ver;
    int vernum,edgenum;
}Graph;
                                //队列 
typedef struct{
    int data[MaxSize];
    int front;
    int rear;
}Queue;

void InitQueue(Queue &Q)
{
    Q.front=Q.rear=0;
}

bool isEmpty(Queue Q)
{
    if(Q.front==Q.rear)
        return true;
    return false;
}

bool isFull(Queue Q)
{
    if((Q.rear+1)%MaxSize==Q.front)
        return true;
    return false;
}

bool EnQueue(Queue &Q,int p)
{
    if(isFull(Q))
        return false;
    Q.data[Q.rear]=p;
    Q.rear=(Q.rear+1)%MaxSize;
    return true;
}

bool DeQueue(Queue &Q,int &p)
{
    if(isEmpty(Q))
        return false;
    p=Q.data[Q.front];
    Q.front=(Q.front+1)%MaxSize;
    return true;
}
                                    //图的基本操作 
void CreateGraph(Graph &G)
{
    G.vernum=G.edgenum=0;
    printf("请输入顶点数:");
    scanf("%d",&G.vernum);
    printf("请输入主表顶点:\n");
    int i,j;
    for(i=0;i<G.vernum;i++)
        scanf("%d",&G.Ver[i].num);
    
    printf("请输入边表顶点号:\n");
    int x;
    for(i=0;i<G.vernum;i++)
    {
        G.Ver[i].first = (ArcNode*)malloc(sizeof(ArcNode));
        G.Ver[i].first->next = NULL;
        printf("%d的边表\n",G.Ver[i].num); 
        ArcNode *p=G.Ver[i].first;
        for(j=0;j<G.vernum;j++)
        {
            scanf("%d",&x);
            if(x==-1)
                break;
            else
            {
                ArcNode *node=(ArcNode*)malloc(sizeof(ArcNode));
                node->adjvex=x;
                node->next=NULL;
                p->next=node;
                p=node;
                G.edgenum++;
            }
        }
    }
}

void displayGraph(Graph G)
{
    int i,j;
    for(i=0;i<G.vernum;i++)
    {
        printf("%d    ",G.Ver[i].num);    
        ArcNode *p=G.Ver[i].first->next;
        while(p)
        {
            printf("-->%d",p->adjvex);
            p=p->next;
        }
        printf("\n");
    } 
}

int FirstNeighbor(Graph G,int x)
{
    int i;
    for(i=0;i<G.vernum;i++)
    {
        if(G.Ver[i].num==x)
            return G.Ver[i].first->adjvex;
    }
    return -1;
}

int NextNeighbor(Graph G,int x,int y)
{
    int i,j;
    for(i=0;i<G.vernum;i++)
    {
        if(G.Ver[i].num==x)
        {
            ArcNode *p=G.Ver[i].first;
            while(G.Ver[p->adjvex].num!=y&&p)
            {
                p=p->next;
            }
            if(p->next)
                return p->adjvex;    
            else
                return -1;    
        }
    }
}

bool visited[MaxSize];

void BFS(Graph G,int i)
{
    int p,w;
    Queue Q;
    InitQueue(Q); 
    printf("%d    ",G.Ver[i].num);
    EnQueue(Q,i);
    while(!isEmpty(Q))
    {
        DeQueue(Q,p);
        for(w=FirstNeighbor(G,G.Ver[p].num);w>=0;w=NextNeighbor(G,G.Ver[p].num,G.Ver[w].num))
        {
            if(!visited[w])
            {
                printf("%d    ",G.Ver[w].num);
                visited[w]=true;
                EnQueue(Q,w);
            }
        }
    }
}

void BFSTraverse(Graph G)
{
    int i;
    for(i=0;i<G.vernum;i++)
        visited[i]=false;
    for(i=0;i<G.vernum;i++)
        if(!visited[i])
            BFS(G,i);
}

/*
void transform(Graph G,MGraph &M)
{
    int i,j;
    for(i=0;i<G.vernum;i++)
        M.Vex[i]=G.Ver[i].num;
    
    for(i=0;i<G.vernum;i++)
        for(j=0;j<G.vernum;j++)
            M.Edge[i][j]=0;
            
    for(i=0;i<G.vernum;i++)
    {
        ArcNode *p=G.Ver[i].first;
        while(p)
        {
            M.Edge[i][p->adjvex]=1;
            p=p->next;    
        }
    }        
}

void displayMGraph(MGraph M)
{
    int i,j;
    
    printf("打印顶点表\n"); 
    for(i=0;i<M.vernum;i++)
        printf("%d    ",M.Vex[i]);
    printf("\n打印邻接矩阵\n");
    for(i=0;i<M.vernum;i++)
    {
        for(j=0;j<M.vernum;j++)
        {
            printf("%d    ",M.Edge[i][j]);
        }
        printf("\n");
    }
}
*/

int main()
{
    Graph G;
    MGraph M;
    CreateGraph(G);
    printf("\n");
    displayGraph(G);
    printf("\n");
    BFSTraverse(G);
//    transform(G,M);
//    displayMGraph(M);
    return 0;
}

 

标签:typedef,return,int,最后,MaxSize,printf,Ver
From: https://www.cnblogs.com/simpleset/p/17854936.html

相关文章

  • 对 .NET程序2G虚拟地址紧张崩溃 的最后一次反思
    一:背景1.讲故事最近接连遇到了几起2G虚拟地址紧张导致的程序崩溃,基本上90%都集中在医疗行业,真的很无语,他们用的都是一些上古的XP,Windows7x86,我也知道技术人很难也基本无法推动硬件系统和设备的升级,这里蕴含了巨大的人情世故。写这一篇的目的是想系统化的整理一下如何配......
  • awk打印最后两行
    保存最后两行并打印,效果如同tail-n2,如需打印指定的列,只需将$0换成对应的列数值,从事实现grep和tail的两个合并命令的效果。awk'{l2=l1;l1=$0}END{printl2"\n"l1}'文件名示例:#准备数据,使用cat从标准输入中内容输出到file文件中cat>file<<EOFlast3last2last1E......
  • 记录今天最后一个bug
    重大发现:使用axios时,当路径下面出现下划线时,一般路径就没问题如果没出现下划线,记得去看看路径出错了没背景:前端vue中使用axios时路径写错,少加了“//”,导致找bug找了半小时,nnd 错误案例 正确例子重大发现:使用axios时,当路径下面出现下划线时,一般路径就没问题如果没出现......
  • (链表)08-链表中倒数最后K个结点
    1importjava.util.*;23/*4*publicclassListNode{5*intval;6*ListNodenext=null;7*publicListNode(intval){8*this.val=val;9*}10*}11*/1213publicclassSolution{14/**15*@param......
  • NOIP2023 最后一战
    省流:没调出T4。书接NOIP2022。去年因为T1多测没清空+T2没输出步数挂了\(100+\)分,然后喜提省二。所以接下来高一下学期都在whk,完全没碰过键盘,所以这个学期刚开始状态还是挺生疏的。CSP2023因为没写游记所以提一嘴。当时可能脑子有点抽,一上来就把T1题面看错了,接下......
  • OI 生涯的最后一周
    ……:在卷文化课,这么卷。你自测四科多少。我:语文英语还没写。数学140,物理90多吧。……:这么强。……:doqe凭这两科都进创了,你文化课这么强,还学这彩票竞赛干嘛。……:要不要挑战中科大。我:(查询后)我这一年的中科大少年班在去年就截止报名了。等少创班。NOIP2023,差一名甚至两......
  • 获取月度第一天和最后一天
    //获取月度第一天publicStringgetFirstMonthDay(intmonth){Calendarcalendar=Calendar.getInstance();//设置月份calendar.set(Calendar.MONTH,month-1);//获取某月最小天数intfirstDay=calendar.getActua......
  • 更快更省更好用!天翼云云原生一体机iStack打通物云最后一公里!
    近年来,随着企业数字化转型的深入,从传统IT架构向云原生架构转型,已经成为企业谋求更高质量发展的必由之路。然而,云原生技术复杂度高,运维成本高,且技术工具间的集成度不足。打破云原生技术应用门槛,以端到端软硬一体的方式为企业提供服务,成为云服务商加速云原生规模化落地的重点。作......
  • 更快更省更好用!天翼云云原生一体机iStack打通物云最后一公里!
    近年来,随着企业数字化转型的深入,从传统IT架构向云原生架构转型,已经成为企业谋求更高质量发展的必由之路。然而,云原生技术复杂度高,运维成本高,且技术工具间的集成度不足。打破云原生技术应用门槛,以端到端软硬一体的方式为企业提供服务,成为云服务商加速云原生规模化落地的重点。作为......
  • Function构造函数可以接受任意数量的参数,但最后一个参数始终被看成函数体,注意函数表达
    下列关于js函数定义方式的描述正确的是Afunctionadd(a,b){returna+b;}函数表达式Bvaradd=newFunction(‘a’,’b’,’returna+b’)函数表达式Cfunctionadd(a,b){returna+b;}函数声明Dvaradd=function(a,b){returna+b;}函数声明Evaradd=newFunction(‘a’,......