# Construct undirected graph and breadth first traversal connected graph (adjacency matrix non recursive cyclic queue)

Time：2021-12-30
``````#include <iostream>
using namespace std;
#define MVNum 100
#define MAXQSIZE 100
typedef char VerTexType;
typedef int ArcType;
bool visited[MVNum];
typedef struct{
VerTexType vexs[MVNum];
ArcType arcs[MVNum][MVNum];
int vexnum,arcnum;
}Graph;
typedef struct{
ArcType *base;
int front;
int rear;
}sqQueue;
void InitQueue(sqQueue &Q){
Q.base = new ArcType[MAXQSIZE];
if(!Q.base)     exit(1);
Q.front = Q.rear = 0;
}
void EnQueue(sqQueue &Q, ArcType e){
if((Q.rear + 1) % MAXQSIZE == Q.front)
return;
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXQSIZE;
}
bool QueueEmpty(sqQueue Q){
if(Q.rear == Q.front)
return true;
return false;
}
void DeQueue(sqQueue &Q, ArcType &u){
u = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXQSIZE;
}
int LocateVex(Graph G , VerTexType v){
for(int i = 0; i < G.vexnum; ++i)
if(G.vexs[i] == v)
return i;
return -1;
}
//Create undirected graph
void CreateUDG(Graph &G){
int i , j , k;
Cout < < "total vertices, total edges:";
cin >> G.vexnum >> G.arcnum;
for(i = 0; i < G.vexnum; ++i){
Cout < < "the first" < < < (I + 1) < < "point name:";
cin >> G.vexs[i];
}
for(i = 0; i < G.vexnum; ++i)
for(j = 0; j < G.vexnum; ++j)
G.arcs[i][j] = 0;
for(k = 0; k < G.arcnum;++k){
VerTexType v1 , v2;
Cout < < "th" < < < (K + 1) < < "vertex to which the edge is attached:";
cin >> v1 >> v2;
i = LocateVex(G, v1);  j = LocateVex(G, v2);
G.arcs[j][i] = G.arcs[i][j] = 1;
}
}
int FirstAdjVex(Graph G , int v){
int i;
for(i = 0 ; i < G.vexnum ; ++i){
if(G.arcs[v][i] == 1 && visited[i] == false)
return i;
}
return -1;
}
int NextAdjVex(Graph G , int u , int w){
int i;
for(i = w ; i < G.vexnum ; ++i){
if(G.arcs[u][i] == 1 && visited[i] == false)
return i;
}
return -1;
}
void BFS (Graph G, int v){
sqQueue Q;
ArcType u;
ArcType w;
cout << G.vexs[v];    visited[v] = true;
InitQueue(Q);
EnQueue(Q, v);
while(!QueueEmpty(Q)){
DeQueue(Q, u);
for(w = FirstAdjVex(G, u); w >= 0; w = NextAdjVex(G, u, w)){
if(!visited[w]){
cout << G.vexs[w];   visited[w] = true;
EnQueue(Q, w);
}
}
}
}
int main(){
Graph G;
CreateUDG(G);
Cout < < "start point of traversing undirected graph:";
VerTexType c;
cin >> c;
int i;
for(i = 0 ; i < G.vexnum ; ++i){
if(c == G.vexs[i])
break;
}
Cout < < "breadth first search traversal undirected graph:";
BFS(G , i);
return 0;
}``````

## The company has a new 20K test, which let me see what the real test ceiling is

Today’s morning meeting at work was a meeting ceremony for new people. I heard that a very powerful boss came. He left his last company and his salary has reached the medium level. Many people are curious. It shouldn’t be easy to get this salary. Sure enough, when I introduced myself, I was surprised to […]