数据结构无向图的建立帮忙写个建立无向图的代码,C语言,要能跑通的代码哦~(无向图通过邻接矩阵建立)
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/12 12:38:42
数据结构无向图的建立
帮忙写个建立无向图的代码,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
再问: 你用哪个编译器的呢?为什么我用c-FREE跑不通你的啊
再答: vc++6.0啊,我没用你那个,我想都是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
再问: 你用哪个编译器的呢?为什么我用c-FREE跑不通你的啊
再答: vc++6.0啊,我没用你那个,我想都是c的都行吧……
建立无向图,输入一个邻接矩阵,求输出边的条数,
具体实现要求:1.通过键盘输入图的顶点和边信息,分别构造一个无向图的邻接矩阵和一个有向图的邻接表.2.分别对建立好的两个
求数据结构算法,已知有m个顶点的无向图,采用邻接矩阵结构储存,写出下列算法
设汁一个算法,建立无向图(n个顶点,e条边)的邻接表
是数据结构试题、一直一个无向图的顶点集为{a b c d e} 由邻接矩阵画出该图的图形
数据结构:n个顶点无向图 用邻接矩阵表示 图中有多少条边~怎么判别~很苦恼~
设无向图G的邻接矩阵为,则G的边数为( ).
1.给出一个无向图的邻接矩阵,输出各个顶点的度,要程序!
已知带权的无向图的邻接矩阵(如图),画出该图及其最小生成树.
求数据结构c语言描述求无向网的最小生成树的代价.
C语言数据结构 克鲁斯卡尔算法求无向网的最小生成树.
判断:一个无向图的邻接矩阵中各元素之和与图中边的条数相等