首页

文章

设计算法,将一个无向图的邻接矩阵转换为邻接表.求大神。这是数据结构里的问题。

发布网友 发布时间:2022-03-27 09:48

我来回答

3个回答

热心网友 时间:2022-03-27 11:17

typedef struct {int vertex[m]; int edge[m][m];}gadjmatrix;

typedef struct node1{int info;int adjvertex; struct node1 *nextarc;}glinklistnode;

typedef struct node2{int vertexinfo;glinklistnode *firstarc;}glinkheadnode;

void adjmatrixtoadjlist(gadjmatrix g1[ ],glinkheadnode g2[ ])

{

int i,j; glinklistnode *p;

for(i=0;i<=n-1;i++) g2[i].firstarc=0;

for(i=0;i<=n-1;i++) for(j=0;j<=n-1;j++)

if (g1.edge[i][j]==1)

{

p=(glinklistnode *)malloc(sizeof(glinklistnode));p->adjvertex=j;

p->nextarc=g[i].firstarc; g[i].firstarc=p;

p=(glinklistnode *)malloc(sizeof(glinklistnode));p->adjvertex=i;

p->nextarc=g[j].firstarc; g[j].firstarc=p;

扩展资料:

数据结构算法注意事项。

算法的设计取决于数据(逻辑)结构,而算法的实现依赖于采用的存储结构。数据的存储结构实质上是它的逻辑结构在计算机存储器中的实现,为了全面的反映一个数据的逻辑结构,它在存储器中的映象包括两方面内容,即数据元素之间的信息和数据元素之间的关系。

不同数据结构有其相应的若干运算。数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新和排序等。

数据的运算是数据结构的一个重要方面,讨论任一种数据结构时都离不开对该结构上的数据运算及其实现算法的讨论。

数据结构不同于数据类型,也不同于数据对象,它不仅要描述数据类型的数据对象,而且要描述数据对象各元素之间的相互关系。



热心网友 时间:2022-03-27 12:35

#include<stdio.h>
#include<stdlib.h>
#define max 20
#define digit 1
define zero 0
typedef struct{
int num;
char data;
}Vertex;
typedef struct{
intn; //顶点数
inte; //弧数
Vertex vexs[max];
int edges[max][max];
}MGraph;
typedef struct node{
int adjvex;
node *nextarc;
char info;
}ARCNODE; //邻接表的结点结构
typedef struct{
char vexdata;
ARCNODE *firstarc;
}VEXNODE; //邻接表的表头结点
typedef struct{
int vexnum,arcnum; //顶点数、弧数
VEXNODE ve[max];
}ALGraph; //邻接表类型

ALGraph *Creat_alg(){ //创建邻接表
ALGraph *alg;
int i,n,e,b,a;
char ch;
ARCNODE *AR;
alg=(ALGraph*)malloc(sizeof(ALGraph));
printf("输入顶点数:");
scanf("%d",&n);
printf("输入弧数:");
scanf("%d",&e);
alg->vexnum=n;
alg->arcnum=e;
printf("输入顶点信息:\n");
for(i=0;i<n;i++){
scanf("%s",&ch);
alg->ve[i].vexdata=ch;
alg->ve[i].firstarc=NULL;
}
printf("输入弧的信息(弧的两端点):\n");
for(i=0;i<e;i++){
scanf("%d%d",&a,&b);
AR=(ARCNODE*)malloc(sizeof(ARCNODE));
AR->adjvex=b;
AR->info=alg->ve[b].vexdata;
AR->nextarc=alg->ve[a].firstarc;
alg->ve[a].firstarc=AR;
AR=(ARCNODE*)malloc(sizeof(ARCNODE));
AR->adjvex=a;
AR->info=alg->ve[a].vexdata;
AR->nextarc=alg->ve[b].firstarc;
alg->ve[b].firstarc=AR;
}
return alg;
}

void ALGout(ALGraph *alg){ //邻接表输出
int i,n1;
ARCNODE *p;
VEXNODE *q;
n1=alg->vexnum;
for(i=0;i<n1;i++){
q=&alg->ve[i];
printf("%c",q->vexdata);
p=q->firstarc;
while(p!=NULL){
printf("─→");
printf("%c",p->info);
p=p->nextarc;
}
printf("\n");
}
}

MGraph *ALG_change_MG(ALGraph *alg){ //将邻接表转换为邻接矩阵
MGraph *mg;
int i,n1;
mg=(MGraph*)malloc(sizeof(MGraph));
mg->n=alg->vexnum;
mg->e=alg->arcnum;
n1=mg->n;
for(i=0;i<n1;i++){
mg->vexs[i].num=i;
mg->vexs[i].data=alg->ve[i].vexdata;
}
ARCNODE *p;
for(i=0;i<n1;i++){
p=alg->ve[i].firstarc;
while(p!=NULL){
mg->edges[i][p->adjvex]=1;
mg->edges[p->adjvex][i]=1;
p=p->nextarc;
}
}
return mg;
}

void MGout(MGraph *mg){ //输出邻接矩阵
int i,j,k;
k=mg->n;
for(i=0;i<k;i++){
for(j=0;j<k;j++){
if(mg->edges[i][j]==1)
printf("%-5d",digit);
else
printf("%-5d",zero);
}
printf("\n");
}
}

void main(){
MGraph *mg;
ALGraph *alg;
printf("建立无向图的邻接表:\n");
alg=Creat_alg();
printf("邻接表输出:\n");
ALGout(alg);
mg=ALG_change_MG(alg);
printf("邻接矩阵输出:\n");
MGout(mg);
}

热心网友 时间:2022-03-27 14:10

算法有问题
贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 3岁孩子不会说话,应该挂什么科? 3岁小孩不会说话正常吗 鹿茸炖乌鸡怎么做? 新型冠状肺炎吃什么药可以预防 冰箱上电后一直响 食品生产许可证编号开头为“ G”。 库存过期香精 无向图的邻接表 表结点个数为m 求图中的边数 这张邻接表的图该怎么画 图的邻接表 画出图的邻接矩阵和邻接表 用邻接表建立无向图,建立过程中顶点和边结点到底是怎么指向? 最好用图片画出来 指针的指向? 谢谢 迪杰斯特拉 无向图 邻接表 无向图的邻接表 数据结构,如何根据邻接表画深度,广度优先生成树? 为什么这张图的邻接表画出来是这样?是怎么画的,求详细过程! 在C语言中编程实现建立无向图的邻接表,输出某个点的邻接点~! 数据结构类:画出无向图(下附)的邻接矩阵和邻接表示意图,并写出每个顶点的度! 对于如下图所示的无向图,请画出: (1)邻接矩阵 (2)邻接表 图的邻接表怎么画 计算机C语言题目,已知赋权无向图,画邻接矩阵和邻接表。还有最小支撑树? 带权无向图的邻接表怎么画 无向带权图的邻接表怎么画 vivoy50手机有ar测量功能吗? vivonex有测距仪吗? iqooneo5有测距仪吗 校准距离感应器在哪里vivo 数据结构:图,邻接表中,无向图的每个顶点的单链表平均长度为2e/n,怎么算出来的? 无向连通图的邻接表的存储 无向图采用邻接表存储结构,编写算法输出图中各连通分量的节点序列 WAN端口有什么作用 wan端口是什么,有什么用 WAN端口和LAN端口有什么区别? 路由器的wan端口到底有什么用 WAN接口是什么? 什么是WAN端口 路由器wan口作用有什么 详解无线路由器WAN,LAN口的作用及怎么接网线 wan端口是什么,有什么用? WAN端口是作什么用的? 苹果6的16g内存不够用怎么办 16G iPhone存储空间不足怎么办 iphone 16G内存不足时该怎么清理释放空间 如何打开微信客户端 微信客户端怎么打开 手机上微信客户端怎么打开 微信客户端打开连接在哪里
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com