69,373
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
#define maxVertNum 100
typedef struct{
int adjvert;
struct node *next;
}edgeNode;//边结构体
typedef struct{
char vertinfo;
edgeNode *firstedge;
}vertNode;//顶点结构体
typedef struct{
vertNode verts[maxVertNum];
int vertNum,edgeNum; //顶点数和边数
}ALGraph; //图结构体
void creatGraph(ALGraph *G,int flag){
int i,j,p,q;
edgeNode *s;
printf("请输入顶点数和边数:");
scanf("%d %d",&G->vertNum,&G->edgeNum);
for(i=0;i<G->vertNum;i++){ //初始化顶点表
getchar();
printf("请输入第%d个顶点信息:",i+1);
G->verts[i].vertinfo=getchar();
G->verts[i].firstedge=NULL;
}
for(j=0;j<G->edgeNum;j++){ //初始化边表
printf("请输入相连接的顶点信息:"); //0 1
scanf("%d%d",&p,&q);
s=(edgeNode*)malloc(sizeof(edgeNode));
s->adjvert=q;
s->next=G->verts[p].firstedge;
G->verts[p].firstedge=s;
if(flag==0){//若为无向图则1 0 添加
s=(edgeNode *)malloc(sizeof(edgeNode));
s->adjvert=p;
s->next=G->verts[q].firstedge;
G->verts[q].firstedge=s;
}
}
}
void printGraph(ALGraph *G){
int i;
for(i=0;i<G->vertNum;i++){
printf("%d %c ",i,G->verts[i].vertinfo);
while(1){
if(G->verts[i].firstedge==NULL){
printf("∧");
break;
}
printf("%d->",G->verts[i].firstedge->adjvert);
G->verts[i].firstedge=G->verts[i].firstedge->next;
}
printf("\n");
}
}
void main(){
int flag;
ALGraph *G;
printf("该图是否为有向图? 是1/否0\n");
scanf("%d",&flag);
G=(ALGraph *)malloc(sizeof(ALGraph));
creatGraph(G,flag);
printGraph(G);
printGraph(G);
}