图的建立
发布网友
发布时间:2022-04-19 09:43
我来回答
共2个回答
热心网友
时间:2023-08-23 20:01
建立图的存储结构(图的类型可以使有向图、无向图可以任选一种类型)能够输出邻接矩阵。我们的课设题目,你可以参考一下,多多指教!
代码如下:
#include "stdio.h"
#define MAXVEX 100
#include "string.h"
#include "math.h"
#include "conio.h"
typedef char VertexType;
struct vertex
{
int num;
VertexType data;
};
typedef struct graph
{
struct vertex vexs[MAXVEX];
int edges[MAXVEX][MAXVEX];
}adjmax;
adjmax creagraph(int *n)
{
int i,j,k,w,e;
char b,t;
adjmax adj;
printf("顶点数(n)和边数(e):");
scanf("%d,%d",n,&e);
for (i=1;i<=*n;i++)
{
getchar();
printf("\t第%d个顶点的信息:",i);
scanf("%c",&adj.vexs[i].data);
adj.vexs[i].num=i;
}
for(i=1;i<=*n;i++)
for(j=1;j<=*n;j++)
adj.edges[i][j]=0;
for(k=1;k<=e;k++)
{
getchar();
printf("第%d条边=》",k);
printf(" 起点: ");
b=getche();
i=1;
while(i<=*n && adj.vexs[i].data!=b) i++;
if(i>*n)
{
printf("输入的起点不存在!\n"); exit(0);
}
printf(" 终点:");
t=getche();
j=1;
while(j<=*n && adj.vexs[j].data!=t) j++;
if(j>*n)
{
printf("输入的终点不存在!\n"); exit(1);
}
printf(" 权值:");
scanf("%d",&w);
adj.edges[i][j]=w;
}
return(adj);
}
void dispgraph(adjmax adj, int n)
{
int i,j;
printf("\n显示邻接矩阵表示的图:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(adj.edges[i][j]!=0)
printf("(%c,%c): %d\n",adj.vexs[i].data,adj.vexs[j].data,adj.edges[i][j]);
}
main()
{
adjmax adj;
int n;
adj=creagraph(&n);
dispgraph(adj,n);
}
参考资料:数据结构导学
热心网友
时间:2023-08-23 20:01
难度高,弄不了