问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据结构:输入两个数给m,n分别表示图的结点数和边数,建立图的邻边矩阵

发布网友 发布时间:2022-04-23 02:16

我来回答

1个回答

热心网友 时间:2023-10-11 09:39

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int visited1[20]={0},visited2[20]={0};
typedef struct
{
char vexs[20];/*顶点表*/
int edges[20][20];
int n,e;
}Mgraph;
typedef struct QNode
{
int data;
struct QNode *next;
int Queusize;
}
QNode,*QueuePtr;//定义队列结点类型
typedef struct
{
QueuePtr front;
QueuePtr rear;
}
LinkQueue;//队列的类型
void InitQueue(LinkQueue *Q)//创建队列
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
Q->front->next=NULL;
}
void EnQueue(LinkQueue *Q,int e)//将元素插入队列
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}
int DeQueue(LinkQueue *Q)//将元素出列且返回元素的位置
{
int e;
QueuePtr p;
p=Q->front->next;
e=p->data;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
free(p);
return (e);
}
int QueueEmpty(LinkQueue *Q)//判断队列是否为空
{
if(Q->front==Q->rear )
return 1;
else
return 0;
}
void CreateMGraph(Mgraph *G)
{

int i,j,k;
printf("输入顶点和边数\n");
scanf("%d %d", &G->n,&G->e);
getchar();
printf("输入%d个顶点\n",G->n);
for(i=0;i<G->n; i++ )
G->vexs[i]=getchar();
for (i = 0;i<G->n; i++)
for (j = 0;j <G->n; j++)
G->edges[i][j]=0;
printf("在矩阵中输入%d个元素:\n",2*(G->e));
for(k = 0;k<2*(G->e);k++)
{
scanf("%d%d",&i,&j);
G->edges[i][j]=1;
}
}
void BFS(Mgraph G,int i)//广度优先遍历
{
int u,j;
LinkQueue Q;
InitQueue(&Q);
printf("%c",G.vexs[i]);
visited2[i]=1;//标记
EnQueue(&Q,i);
while(!QueueEmpty(&Q))
{
i=DeQueue(&Q);
for(j=0;j<G.n;j++)
if(G.edges[i][j]==1&&!visited2[j])
{ printf("%c",G.vexs[j]);
visited2[j]=1;
EnQueue(&Q,j);
}
}

}
void DFSM(Mgraph *G, int i)
{
int j;
printf("%c",G->vexs[i]);
visited1[i]=1;
for(j=0;j<G->n; j++)
{
if(G->edges[i][j]==1&&!visited1[j])
DFSM(G,j);
}
}
main()
{
Mgraph G;
CreateMGraph(&G);
printf("广度:\n");
BFS(G,0);
printf("\n");
printf("深度:\n");
DFSM(&G,0);
}
运行下没问题,有什么问题可以联系。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中支黄金叶什么价 怎么在整个PPT中加入背景音乐,而不是在一张幻灯片中插入,我要的是从... 构造柱有哪些构造措施 中国风的女式花裤配什么鞋 留抵抵税额是什么意思 留抵税抵什么意思 ...里发现很多门店装修和华为一样的,但是官网查不到,这种店铺购买... 墙布贴了关窗多久 墙布贴了要关窗多久 墙布贴好要多久密闭多久 PS3手柄怎么连接智能手机 c语言数据结构 小米note 的图片设置成私密相册后怎么找到私密相册? ps3蓝牙手柄连接手机有哪些步骤 数据结构 图的遍历 小米note手机相册里面的私密相册里面的图片都没有了怎么找回。急!急... 小米手环怎么绑定苹果手机 数据结构中关于最小生成树的步骤 哪里可以买到好的普洱茶 图的存储结构——所存储的信息有哪些? 苹果7p绑定小米手环2显示“绑定失败,请将手环贴近手机后重试”,这是 我想在网上买点普洱茶喝,不知道那家店能买到好茶叶,了解的朋友给我推荐几家店铺。 数据结构最小生成树问题 小米手环怎么连接iPhone手机的健康应用? 怎么购买普洱茶 数据结构——图 小米note照片设为私密照片怎么打开 在网上买普洱茶在哪里比较好,淘宝还是网站? 苹果手机怎么和小米手环怎么连接 小米note8pro私密照片怎么打开? 安卓手机蓝牙怎么连接ps3手柄? 哪位大神能告诉我小米note私密相册在那里打开 邻接矩阵的表示法 ps3游戏手柄怎么连接安卓手机 红米note手机隐藏了相册怎么弄出来? 索尼ps3蓝牙游戏手柄手机能用吗? ps3蓝牙手柄能连接安卓手机吗? sonyps3手柄怎么连接手机 PS3手柄可以连接MTK的安卓手机吗 PS3手柄连接手机玩游戏,如何设置手柄? PS3手柄连接手机 必须ROOT吗 iPhone 6Plus可以用PS3的蓝牙手柄玩游戏吗?怎么链接? ps3手柄连接手机时需要输入pin码配对,怎么破 PS3无线手柄连接手机 PS3 手柄连接手机和电脑 怎样让ps3 手柄 连接手机 如何用PS3蓝牙手柄连接安卓手机玩游戏 索尼ps3游戏手柄与oppor7005连接教程 sony PS3的手柄怎么用蓝牙连接到电脑上玩游戏? 刷卡为什么显示需要实名认证,换另外一个pos却可以刷?