#include
#include
#include
#include
#define Max_Vertex_Num 100
typedef struct
{
char vex;
char start;
char endx;
} Node;
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
int weight;
} ArcNode;
typedef struct VNode
{
char vertex;
ArcNode *firstarc;
} VNode;
typedef VNode AdjList[Max_Vertex_Num];
typedef struct
{
AdjList adjlist;
int vexnum,arcnum;
} ALGraph;
typedef struct
{
char vexs[Max_Vertex_Num];
int arcs[Max_Vertex_Num][Max_Vertex_Num];
int vexnum,arcnum;
} Mgraph;
int LocateVex1(Mgraph *G,char u)
{
int i;
for(i=0; ivexnum; i++)
{
if(G->vexs[i]==u)
return i;
}
return -1;
}
void CreateMGraph(Mgraph *G,int n,int m,Node *q)
{
int i,j,k;
G->vexnum=n;
G->arcnum=m;
for(i=0; ivexnum; i++)
{
G->vexs[i]=q[i].vex;
}
for(i=0; ivexnum; i++)
{
for(j=0; jvexnum; j++)
{
G->arcs[i][j]=0;
}
}
for(k=0; karcnum; k++)
{
char v1=q[k].start;
char v2=q[k].endx;
i=LocateVex1(G,v1);
j=LocateVex1(G,v2);
if((i==-1)||(j==-1))
printf("该条边不存在n");
else
{
G->arcs[i][j]=1;
G->arcs[j][i]=1;
}
}
}
void DispMatrix(Mgraph G)
{
int i,j;
printf(" ");
for(i=0;ivexnum; i++)
{
if(G->adjlist[i].vertex==u)
return i;
}
return -1;
}
void CreateALGraph(ALGraph *G,int n,int m,Node *q)
{
ArcNode *p1,*p2;
int i,j,k;
G->vexnum=n;
G->arcnum=m;
for(k=0; kvexnum; k++)
{
G->adjlist[k].vertex=q[k].vex;
G->adjlist[k].firstarc=NULL;
}
k=0;
while(karcnum)
{
char v1=q[k].start;
char v2=q[k].endx;
i=LocateVex2(G,v1);
j=LocateVex2(G,v2);
if((i==-1)||(j==-1))
printf("该边不存在!n");
else
{
k++;
p1=(ArcNode *)malloc(sizeof(ArcNode));
p1->adjvex=j;
p1->nextarc=G->adjlist[i].firstarc;
G->adjlist[i].firstarc=p1;
p2=(ArcNode *)malloc(sizeof(ArcNode));
p2->adjvex=i;
p2->nextarc=G->adjlist[j].firstarc;
G->adjlist[j].firstarc=p2;
}
}
}
void DispAdjList(ALGraph G)
{
ArcNode *p;
int i;
for(i=0; inextarc)
printf("->%c",p->adjvex+'A');
printf("n");
}
}
void changeAdjlist(Mgraph g,ALGraph *G)
{
int i,j;
ArcNode *p;
for (i=0; iadjlist[i].vertex=g.vexs[i];
G->adjlist[i].firstarc=NULL;
}
for (i=0; i=0; j--)
if (g.arcs[i][j]!=0)
{
p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=j;
p->nextarc=G->adjlist[i].firstarc;
G->adjlist[i].firstarc=p;
}
G->vexnum=g.vexnum;
G->arcnum=g.arcnum;
}
void changeMGraph(Mgraph *G,ALGraph g)
{
int i;
ArcNode *p;
for(i=0;ivexs[i]=g.adjlist[i].vertex;
for(i=0;iarcs[i][p->adjvex]=1;
p=p->nextarc;
}
}
G->vexnum=g.vexnum;
G->arcnum=g.arcnum;
}
void BfsALGraph(ALGraph G,int n,int v)
{
ArcNode *p;
int i,j;
int Q[n+1],r,f;
int visited[n];
for(i=0;iadjvex]==0)
{
printf(" %c",p->adjvex+'A');
visited[p->adjvex]=1;
r=(r+1)%(n+1);
Q[r]=p->adjvex;
}
p=p->nextarc;
}
}
}
void Dfs(Mgraph G,int i,int visited[],int *t)
{
int j;
visited[i]=1;
if(t+1==G.vexnum)
{
printf("%c ",G.vexs[i]);
}
else
{
printf("%c ",G.vexs[i]);
t++;
}
for(j=0;j