#include<stdio.h>
#include<stdlib.h>
#define MAXVEX 100
typedef char vertextype;
typedef int edgetype;
typedef struct edgenode
{
int adjvex;
struct edgenode *next;
}edgenode;
typedef struct vertexnode
{
vertextype data;
edgenode *firstedge;
}vertexnode,adjlist[MAXVEX];
typedef struct
{
adjlist adjex_list;
int num_vertex,num_edges;
}MGraph;
void creat_graph(MGraph *G)
{
int i,j,k;
edgenode *e;
printf("input number of vertexes and edges\n");
scanf("%d,%d", &G->num_vertex, &G->num_edges);
for(i=0;i<G->num_vertex;++i)
{
scanf("\n%c",&G->adjex_list[i].data);
G->adjex_list[i].firstedge=NULL;
}
for(k=0;k<G->num_edges;k++)
{
printf("input two vertexes between egde,(m,n):\n");
scanf("%d,%d",&i,&j);
e=(edgenode *)malloc(sizeof(edgenode));
e->adjvex=j;//邻接序号是j 头插法
e->next=G->adjex_list[i].firstedge;//e-指向原来首节点所指向的地方代替了首节点
G->adjex_list[i].firstedge=e;
e=(edgenode *)malloc(sizeof(edgenode));
e->adjvex=i;//邻接序号是j 头插法
e->next=G->adjex_list[j].firstedge;
G->adjex_list[j].firstedge=e;
}
}
void display(MGraph *G)
{
edgenode *p;
int i;
for( i=0;i<G->num_vertex;++i)
{
printf("%c:[%d]",G->adjex_list[i].data,i);
p=G->adjex_list[i].firstedge;
while(p)
{
printf("——>[%d]",p->adjvex);
p=p->next;
}
printf("\n");
}
}
int connected(MGraph *G,int m,int n)
{
edgenode *p;
if(m>G->num_vertex-1||n>m>G->num_vertex-1||m<0||n<0)
{
printf("over!");
return -1;
}
else
if(m==n)
{
printf("[%d] is connected to itself!",m);
return 0;
}
else
{
p=G->adjex_list[m].firstedge;
while(p)
{
if(p->adjvex==n)
{return 0;break;}
else
p=p->next;
}
return 1;
}
}
void union_two_vertex(MGraph *G,int m,int n)
{
edgenode *e;
if(!connected(G,m,n))
{
printf("[%d] is connected to [%d].",m,n);
}
else
if(m>G->num_vertex-1||n>G->num_vertex-1||m<0||n<0)
{
printf("[%d] can not be unioned with [%d]! ",m,n);
}
else
{
e=(edgenode *)malloc(sizeof(edgenode));
e->adjvex=m;//邻接序号是m 头插法
e->next=G->adjex_list[n].firstedge;//e-指向原来首节点所指向的地方代替了首节点
G->adjex_list[n].firstedge=e;
e=(edgenode *)malloc(sizeof(edgenode));
e->adjvex=n;//邻接序号是n头插法
e->next=G->adjex_list[m].firstedge;
G->adjex_list[m].firstedge=e;
}
}
int main()
{
MGraph graph;
creat_graph(&graph);
display(&graph);
union_two_vertex(&graph,2,1);
display(&graph);
return 0;
}
dynamic connected图顶点连接情况+连线
最新推荐文章于 2020-04-12 23:14:11 发布