一,广度优先遍历邻接矩阵代码
#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也要有。
声明指向特定类型的指针: