//图的邻接矩阵储存
#include<stdio.h>
#include<stdlib.h>
#define maxsize 20
typedef struct{
//图的顶点和边的个数
int vtex,e;
//图的顶点的值
char dd[maxsize];
//图的边的顶点
int mtx[10][10];
}Mgraph;
//求给定顶点在数组中的位置
int locate(Mgraph *g,char v){
int i;
for(i=0;i<g->vtex;i++){
if(v==g->dd[i]);
return i;
}
return -1;
}
//初始化无向无权图
Mgraph creatUDG(){
Mgraph *g=( Mgraph *)malloc(sizeof(Mgraph));
printf("请输入图的顶点个数:");
scanf("%d",&g->vtex);
printf("请输入图的边的个数:");
scanf("%d",&g->e);
int i,j;
for(i=0;i<g->vtex;i++){
for(j=0;j<g->e;j++){
g->mtx[i][j]=0;
}
}
//给边
int m,n;
for(i=0;i<g->e;i++){
printf("请输入边的顶点:");
char v1,v2;
scanf("%c%c",&v1,&v2);
m=locate(g,v1);
n=locate(g,v2);
g->mtx[m][n]=g->mtx[n][m]=1;
}
}
//初始化有向无权图
Mgraph creatDF(){
Mgraph *g=( Mgraph *)malloc(sizeof(Mgraph));
printf("请输入图的顶点个数:");
scanf("%d",&g->vtex);
printf("请输入图的边的个数:");
scanf("%d",&g->e);
int i,j;
for(i=0;i<g->vtex;i++){
for(j=0;j<g->e;j++){
g->mtx[i][j]=0;
}
}
//给边
int m,n;
for(i=0;i<g->e;i++){
printf("请输入边的顶点:");
char v1,v2;
scanf("%c%c",&v1,&v2);
m=locate(g,v1);
n=locate(g,v2);
g->mtx[m][n]=1;
}
}
//初始化无向有权图
Mgraph creatUG(){
Mgraph *g=( Mgraph *)malloc(sizeof(Mgraph));
printf("请输入图的顶点个数:");
scanf("%d",&g->vtex);
printf("请输入图的边的个数:");
scanf("%d",&g->e);
int i,j;
for(i=0;i<g->vtex;i++){
for(j=0;j<g->e;j++){
g->mtx[i][j]=0;
}
}
//给边
int m,n;
for(i=0;i<g->e;i++){
printf("请输入边的起点和终点以及每条边的权重:");
char v1,v2;
int w;
scanf("%c%c%d",&v1,&v2,&w);
m=locate(g,v1);
n=locate(g,v2);
g->mtx[m][n]=g->mtx[n][m]=1;
}
}
//初始化有向有权图
Mgraph creatDN(){
Mgraph *g=( Mgraph *)malloc(sizeof(Mgraph));
printf("请输入图的顶点个数:");
scanf("%d",&g->vtex);
printf("请输入图的边的个数:");
scanf("%d",&g->e);
int i,j;
for(i=0;i<g->vtex;i++){
for(j=0;j<g->e;j++){
g->mtx[i][j]=0;
}
}
//给边
int m,n;
for(i=0;i<g->e;i++){
printf("请输入边的起点和终点以及每条边的权重:");
char v1,v2;
int w;
scanf("%c%c%d",&v1,&v2,&w);
m=locate(g,v1);
n=locate(g,v2);
g->mtx[m][n]=1;
}
}
int main(){
int a;
printf("请选择要创建的图的类型(0为无向无权图,1为有向无权图,2为无向有权图,3为有向有权图)");
scanf("%d",&a);
switch(a)
{
case 0:
creatUDG();
break;
case 1:
creatDF();
break;
case 2:
creatUG();
break;
case 3:
creatDN();
break;
}
}