广度优先遍历邻接矩阵代码和C++第四章学习

一,广度优先遍历邻接矩阵代码

#include<stdio.h>
#define MAXSIZE 100
int visit[100];
typedef struct GrapNode
{
    char data[100];
    int arc[100][100];
    int sumver,sumedge;
} GrapNode;
typedef struct Queue
{
    int data[MAXSIZE];
    int front;
    int rear;
    int flag;
} EQueue;
void InitQueue(EQueue *Q)
{
    Q->front=0;
    Q->rear=0;
}
int EnQueue(EQueue *Q,int e)
{
    if((Q->rear+1)%MAXSIZE==Q->front)
        return -1;
    Q->data[Q->rear]=e;
    Q->flag=1;
    Q->rear=(Q->rear+1)%MAXSIZE;
    return 0;
}
int DeQueue(EQueue *Q,int *e)
{
    if(Q->front==Q->rear)
        return -1;
    *e=Q->data[Q->front];
    Q->flag=0;
    Q->front=(Q->front+1)%MAXSIZE;
    return 0;
}
int QueueEmpty(EQueue Q)
{
    if(Q.flag==0&&Q.front==Q.rear)
        return 1;
    else return 0;
}
void GreatGrap(GrapNode *G)
{
    int i,j,k;
    printf("请输入图的结点数和连接的边数:");
    scanf("%d %d",&G->sumver,&G->sumedge);
    getchar();
    printf("请输入结点字母:");
    for(i=0; i<G->sumver; i++)
        scanf("%c",&G->data[i]);
    for(i=0; i<G->sumver; i++)
        for(j=0; j<G->sumver; j++)
            G->arc[i][j]=0;
    for(k=0; k<G->sumedge; k++)
    {
        printf("请输入连接边的位置(i,j):");
        scanf("%d %d",&i,&j);
        G->arc[i][j]=1;
        G->arc[j][i]=G->arc[i][j];
    }
}
void GFS(GrapNode *G)
{
    int i,j;
    EQueue Q;
    for(i=0; i<G->sumver; i++)
        visit[i]=0;
    InitQueue(&Q);
    for(i=0; i<G->sumver; i++)
    {
        if(visit[i]!=1)
        {
            visit[i]=1;
            printf("%c",G->data[i]);
            EnQueue(&Q,i);
            while(QueueEmpty(Q)!=1)
            {
                DeQueue(&Q,&i);
                for(j=0; j<G->sumver; j++)
                {
                    if(visit[j]!=1&&G->arc[i][j]==1)
                    {
                        visit[j]=1;
                        printf("%c",G->data[j]);
                        EnQueue(&Q,j);
                    }
                }
            }
        }
    }
}
int main()
{
    GrapNode G;
    GreatGrap(&G);
    GFS(&G);
    return 0;
}

二,C++第四章学习
getline()函数通过换行符来确定结尾,并不保留换行符。
get()函数读取换行符,并将其保留在队列中,如果要对其进行输入需要用get()将换行吸收,相当于C语言里面的getchar()。
在这里插入图片描述
getline()使用更简单些,get()是的检查错误更简单。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
利用string类型可以将一个string对象赋给另一个string对象。
在这里插入图片描述
还可以利用cstring头文件中的strcopy(字符串1,字符串2)将2复制到1上,或用strcat(字符串1,字符串2)将2接到1的尾部。
在这里插入图片描述
string1.size()
strlen(字符串1) 两种计算字符串长度的方法。
在这里插入图片描述
在这里插入图片描述
函数strlen()计算数组长度,从数组的第一个元素开始计算字节数,直到遇到空字符截止。

C++允许在声明结构体变量时省略关键字struct;使用结构体类型访问各成员时用成员操作符(.)。
C++结构体在赋值时可以直接用等“=”,成员内部用“,”隔开。
在这里插入图片描述
或用这种类型:
在这里插入图片描述
C++中两个相同类型的结构体可以直接用“=”相互复制。
在这里插入图片描述
在这里插入图片描述共用体(union)
它能够存储不同的数据类型,但使用时,一次只能使用一种数据类型。共用体可以用在结构体中。
在这里插入图片描述
枚举:是一个被命名的整型常数的集合。
1)在实际应用中,对于如人的性别只有两种可能,一星期只有七种可能取值,就用枚举。
2)枚举是将变量的值一一列举出来,取的变量只限于列举出来的值的范围内取值。
3)定义一个变量是枚举类型,可以先定义一个枚举类型名,然后再说明这个变量是该枚举类型。
**4)**枚举元素即枚举常量是一个常量(常数)不用对其赋值,他们自己有值,编译器会按定义顺序使它们的值从0,1,2…

在这里插入图片描述
在这里插入图片描述

C++中,new用来开辟空间的,delete用来释放空间。一般delete需和new一起使用。

在这里插入图片描述
使用new 创建动态数组:
int *psome=new int [10];//创建了一个含有10个int元素的数组。
释放时:delete [] psome;
如果使用new时不带“[ ]”则使用delete时也不用,如果new有则delete也要有。

声明指向特定类型的指针:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值