数据结构无向图的建立帮忙写个建立无向图的代码,C语言,要能跑通的代码哦~(无向图通过邻接矩阵建立)

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/04 18:08:34
数据结构无向图的建立帮忙写个建立无向图的代码,C语言,要能跑通的代码哦~(无向图通过邻接矩阵建立)

数据结构无向图的建立帮忙写个建立无向图的代码,C语言,要能跑通的代码哦~(无向图通过邻接矩阵建立)
数据结构无向图的建立
帮忙写个建立无向图的代码,C语言,要能跑通的代码哦~(无向图通过邻接矩阵建立)

数据结构无向图的建立帮忙写个建立无向图的代码,C语言,要能跑通的代码哦~(无向图通过邻接矩阵建立)
您好,这是我们数据结构一个作业程序,希望能帮到你.
#include
#include
#define int_max 10000
#define inf 9999
#define max 20
//邻接矩阵定义
typedef struct ArcCell
{
int adj;
char *info;
}ArcCell,AdjMatrix[20][20];
typedef struct
{
char vexs[20];
AdjMatrix arcs;
int vexnum,arcnum;
}MGraph_L;
int LocateVex(MGraph_L G,char v)//查找顶点v的序号
{
int i=0;
while(G.vexs[i]!=v)
{
++i;
}
return i;
}
int createMGraph_L(MGraph_L &G)//创建图用邻接矩阵表示
{
char v1,v2;
int i,j,w;
printf("创建无向图\n");
printf("请输入无向图G的顶点数和弧数:");
scanf("%d%d",G.vexnum,G.arcnum);
for(i=0;i!=G.vexnum;++i)
{
printf("输入顶点%d\n",i);
scanf("%c",G.vexs[i]);
}
for(i=0;i!=G.vexnum;++i)
for(j=0;j!=G.vexnum;++j)
{
G.arcs[i][j].adj=int_max;
G.arcs[i][j].info=NULL;
}
printf("输入一条边依附的顶点和权:\n");
for(int k=0;k!=G.arcnum;++k)
{

scanf("%c%c%d",&v1,&v2,&w); //输入一条边依附的两点及权值
i=LocateVex(G,v1); //确定顶点V1和V2在图中的位置
j=LocateVex(G,v2);
G.arcs[i][j].adj=w;
G.arcs[j][i].adj=w;
}
return G.vexnum;
}
typedef struct ArcNode //弧结点
{
int adjvex; //该弧所指向的顶点的位置
struct ArcNode *nextarc; //指向下一条弧的指针
//char *info; //该弧相关信息的指针
}ArcNode;
typedef struct vnode //邻接链表顶点头接点
{
char data; //顶点信息
ArcNode *firstarc; //指向第一条依附该顶点的弧的指针
}vnode,adjlist;
typedef struct //图的定义
{
adjlist vertices[max];
int vexnum,arcnum; //图的当前顶点数和弧数
}ALGraph;
int CreateUDG(ALGraph &gra,MGraph_L G)//用邻接表存储图
{
int i=0,j=0;
ArcNode *arc,*tem,*p;
for(i=0;i!=G.vexnum;++i)
{
gra.vertices[i].data=G.vexs[i];
gra.vertices[i].firstarc=NULL;
}
for(i=0;i!=G.vexnum;++i)
{
for(j=0;j!=G.vexnum;++j)
{
if(gra.vertices[i].firstarc==NULL)
{
if(G.arcs[i][j].adj!=int_max&&j!=G.vexnum)
{
arc=(ArcNode *)malloc(sizeof(ArcNode));
arc->adjvex=j;
gra.vertices[i].firstarc=arc;
arc->nextarc=NULL;
p=arc;
++j;
while(G.arcs[i][j].adj!=int_max&&j!=G.vexnum)
{
tem=(ArcNode *)malloc(sizeof(ArcNode));
tem->adjvex=j;
gra.vertices[i].firstarc=tem;
tem->nextarc=arc;
arc=tem;
++j;
}
--j;
}
}
else
{
if(G.arcs[i][j].adj!=int_max&&j!=G.vexnum)
{
arc=(ArcNode *)malloc(sizeof(ArcNode));
arc->adjvex=j;
p->nextarc=arc;
arc->nextarc=NULL;
p=arc;
}


}

}
}
gra.vexnum=G.vexnum;
gra.arcnum=G.arcnum;
printf("图G的邻接表创建成功!\n");
return 1;
}
typedef struct
{
int adjvex;
int lowcost;
}closedge;
int prim(int g[][max],int n) //最小生成树PRIM算法
{
int lowcost[max],prevex[max]; //LOWCOST[]存储当前集合U分别到剩余结点的最短路径
//prevex[]存储最短路径在U中的结点
int i,j,k,min;
for(i=2;i