#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef char VertexType[4];
#define MAX 10
typedef struct ArcNode
{
int vexIndex;
struct ArcNode* next;
}Node,*LPNODE;
LPNODE createNode(int vexIndex)
{
LPNODE newNode = (LPNODE)malloc(sizeof(NODE));
newNode->vexIndex = vexIndex;
newNode->next = NULL;
return newNode;
}
void insertNodeByHead(LPNODE *headNode,int vexIndex)
{
LPNODE newNode = createNode(vexIndex);
newNode->next = *headNode;
*headNode = newNode;
}
typedef struct VNode
{
VertexType data;
LPNODE firstNode;
}VNODE,ARRAY[MAX],*LPVNODE;
typedef struct GRAPH
{
int arcNum;
int vexnum;
ARRAY vextex;
}GRAPH,*LPGRAPH;
int searchPos(LPGRAPH G,VertexType X)
{
for(int i=0;i<G->vexnum;i++)
{
if(strcmp(G->vextex[i].data,x)==0)
{
return i;
}
}
return -1;
}
LPGRAPH createGraph()
{
LPGRAPH G = (LPGRAPH)malloc(sizeof(GRAPH));
printf("输入边数和顶点数:",&G->arcnum,&G->vexnum);
printf("请输入 %d 个顶点:\n"G->vexnum);
for(int i=0;i < G->vexnum; i++)
{
scanf("%s",G->vextex[i].data);
G->vextex[i].firstNode = NULL;
}
VertexType v1,v2;
int posV1;
int posV2;
printf("请输入边的信息:\n");
for(int i=0;i<G->arcnum;i++)
{
scanf("%s%s",v1,v2);
posV1 = searchPos(G,v1);
posV2 = searchPos(G,v2);
insertNodeByHead(&G->vextex[posV1].firstNode,posV2);
insertNodeByHead(&G->vextex[posV2].firstNode,posV1);
}
return G;
}
void visitVextex(VertexType x)
{
printf("%s-->",x);
]
void BFSTravers(LGPRAPH G, int inPos)
{
int visited[MAX] = {0};
int queue[MAX];
int front; = -1;
int rear = -1;
visitVextex(G->vextex[inPos].data);
viseted[inPos] = 1;
queue[++rear] = inPos;
LPNODE pMove = NULL;
while(front < rear)
{
inPos = queue[++front];
pMove = G->vextex[inPos].firstNode;
while(pMove)
{
if(visited[pMove->vexIndex] == 0)
{
vistVextex(G->vextex[pMove->vexIndex].data);
visited[pMove->vexIndex] = 1;
queue[++rear] = pMove->vexIndex;
}
pMove = pMove->next;
]
}
}
int main()
{
LPGAPH G = createGraph();
BFSTravers(G,0);
printf("\n");
system("pause");
return 0;
}