#include<bits/stdc++.h>
#define FINITY 5000 //以此标为无穷大
#define M 20
using namespace std;
typedef char vertextype; //存储结构为矩阵的图
typedef int edgetype;
typedef struct{
vertextype vexs[M];
edgetype edges[M][M];
int n,e;
}Mgraph;
typedef char DataType; //存储结构为邻链表的图
typedef struct node{
int dajvex;
struct node *next;
}EdgeNode;
typedef struct vnode{
DataType vertex;
EdgeNode *FirstEdge;
}VertexNode;
typedef struct{
VertexNode adjlist[M];
int n,e;
}LinkedGraph;
typedef char DataType; //存储结构为邻接多重链表的图
typedef struct node{
int ivex;
int jvex;
struct node *inext;
struct node *jnext;
}EdgeNode;
typedef struct vnode{
DataType vertex;
EdgeNode *FirstEdge;
}VertexNode;
typedef struct{
VertexNode adjlist[M];
int n,e;
}MLinkedGraph;
int main(){
return 0;
}
void creat(Mgraph *g, char *s, int c){//以文件函数建立存储结构为矩阵的图
int i,j,k,w;
FILE *rf;
rf=fopen(s,"r");
if(rf){
fscanf(rf,"%d %d", &n,&e);
for(i=0;i<g->n;i++){
fscanf(rf,"%1s", &g->vexs[i]);
}
for(i=0;i<g->n;i++){
for(j=0;j<g->n;j++){
if(i==j){
g->edges[i][j]=0;
}
else{
g->edges[i][j]=FINITY;
}
}
}
for(k=0;k<g->e;k++){
fscanf(rf,"%d %d %d", &i, &j, &w);
g->edges[i][j]=w;
if(c==0){
g->edges[j][i]=w;
}
}
fclose(rf);
}
else{
g->n=0;
}
}
void creat(LinkedGraph *g,char *f,int c){//以文件函数建立存储结构为邻链表的图
int i,j,k;
FILE *fp=fopen(f,"r");
if(fp){
fscanf(fp,"%d %d", &g->n,&g->e);
for(i=0;i<g->n;i++){
fscanf(fp,"%1s", &g->adjlist[i].vertex);
g->adjlist[i].vertex=NULL;
}
for(k=0;k<g->e;k++){
fscanf(fp,"%d %d", &i, &j);
s=(EdgeNode *)malloc(sizeof(EdgeNode));
s->adjvex=j;
s->next=g->adjlist[i].FirstEdge;
g->adjlist[i].FirstEdge=s;
if(c==0){
s=(EdgeNode *)malloc(sizeof(EdgeNode));
s->adjvex=i;
s->next=g->adjlist[j].FirstEdge;
g->adjlist[j].FirstEdge=s;
}
}
fclose(fp);
}
else{
g->n=0;
}
}
void creat(MLinkedGraph *g,char *f,int c){//以文件函数建立存储结构为多重邻链表的图(适用于无向图)
int i,j,k;
FILE *fp=fopen(f,"r");
if(fp){
fscanf(fp,"%d %d", &g->n,&g->e);
for(i=0;i<g->n;i++){
fscanf(fp,"%1s", &g->adjlist[i].vertex);
g->adjlist[i].vertex=NULL;
}
for(k=0;k<g->e;k++){
fscanf(fp,"%d %d", &i, &j);
s=(EdgeNode *)malloc(sizeof(EdgeNode));
s->ivex=i;
s->jvex=j;
s->inext=g->adjlist[i].FirstEdge;
g->adjlist[i].FirstEdge=s;
s->inext=g->adjlist[j].FirstEdge;
g->adjlist[j].FirstEdge=s;
}
}
fclose(fp);
}
else{
g->n=0;
}
}
1.存储结构为矩阵的图
2.存储结构为邻链表的图
3.存储结构为邻接多重链表的图
4.以文件函数建立存储结构为矩阵的图
5.以文件函数建立存储结构为邻链表的图
6.以文件函数建立存储结构为多重邻链表的图(适用于无向图)