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

用队列实现以邻接矩阵作存储结构图的宽度优先搜索

发布网友 发布时间:2022-04-25 21:00

我来回答

3个回答

热心网友 时间:2022-05-02 17:08

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int visited[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]);
visited[i]=1;//标记
EnQueue(&Q,i);
while(!QueueEmpty(&Q))
{
i=DeQueue(&Q);
for(j=0;j<G.n;j++)
if(G.edges[i][j]==1&&!visited[j])
{ printf("%c",G.vexs[j]);
visited[j]=1;
EnQueue(&Q,j);
}
}

}
main()
{
Mgraph G;
CreateMGraph(&G);
printf("广度:\n");
BFS(G,0);
}
给你吧,有不懂再问我。

热心网友 时间:2022-05-02 18:26

这个是你要的东西:
详细说明:1,图的建立与遍历操作 建立图的邻接矩阵 输出图从顶点V0出发按深度优先遍历的顶点序列 输出图从顶点V0出发按广度优先遍历的顶点序列 2,图的建立与拓扑排序

到这下载吧,我给你下的,如果不会弄把你的邮箱留下,我给你传

http://download.pudn.com/downloads64/sourcecode/math/65520769operate.rar

以下是部分代码:
#include"graph1.h"
#include"graph2.h"
#include<STDLIB.H>
void main(){

char input1;
int input2;
c:
do{
system("cls");
cout<<ENDL; cin 2:?; 1 0 cout<<endl<<?请选择 cout<<?='=================图的操作==========================="<<endl<<endl;' 图的建立与拓朴排序?<<endl; cout<<setw(20)<<2<<?------- 图的建立与遍历操作?<<endl; cout<<setw(20)<<1<<?------- 出口?<<endl; cout<<setw(20)<<0<<?------->>input1;
}while(input1<'0'||input1>'2');
switch(input1){
case '0':
cout<<ENDL<<" cin 1 0 cout<<? 4:?; 3 2 请选择: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~?<<endl; cout<<setw(10)<<4<<?.------返回上一层菜单?<<endl; cout<<setw(10)<<3<<?.------输出图从顶点V0出发按广度优先遍历的顶点序列?<<endl; cout<<setw(10)<<2<<?.------输出图从顶点V0出发按深度优先遍历的顶点序列?<<endl; cout<<setw(10)<<1<<?.------建立图的邻接矩阵?<<endl; cout<<setw(10)<<0<<?.------出口?<<endl; ~~~~~~~~~~~~~~~~~~~~~~~图的建立与遍历操作~~~~~~~~~~~~~~~~~~~~~~~~~?<<endl<<endl; cout<<endl; system(?cls?); do{ a: ?1?: case exit(1); 再见!?<<endl;>>input1;
}while(input1>'4'||input1<'0');
Matrix ga;
switch(input1){
case '0':
cout<<ENDL<<" cin cout<<endl; system(?cls?); ?1?: case exit(1); 再见!?<<endl; cout<<?请输入搜索起始顶点号(0~?<<ga.VertexNum-1<<?):?; cout<<?------------------输出图从顶点V0出发按深度优先遍历的顶点序列-----------?<<endl<<endl; ?2?: a; goto system(?pause?); ga.PrintMatrix(); ga.CreateMatrix(); ga.InitMatrix(); cout<<?------------------------建立图的邻接矩阵-----------------------------?<<endl;>>input2;
ga.Initvisited();
ga.dfsMatrix(input2);
cout<<ENDL; cin cout<<endl; system(?cls?); case cout<<?请输入搜索起始顶点号(0~?<<ga.VertexNum-1<<?):?; a; goto system(?pause?); cout<<?----------------------输出图从顶点V0出发按广度优先遍历的顶点序列----------?<<endl<<endl; ?3?:>>input2;
ga.bfsMatrix(input2);
cout<<ENDL; cin 1 0 cout<<? 2 cout<<endl; system(?cls?); do{ case ?2?: a; goto system(?pause?); 3:?; cout<<?请选择: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`?<<endl; cout<<setw(40)<<?3.------返回上一层菜单?<<endl; cout<<setw(42)<<?2.------输出图的拓朴序列?<<endl; cout<<setw(40)<<?1.------建立图的邻接表?<<endl; cout<<setw(30)<<?0.------出口?<<endl; ~~~~~~~~~~~~~~~~图的建立与拓朴排序~~~~~~~~~~~~~~~~~~~?<<endl<<endl; b: gl; GAdjoin } c; ?4?:>>input1;
}while(input1<'0'||input1>'3');
switch(input1){
case '0':
cout<<ENDL<<" cout<<endl; system(?cls?); ?1?: case exit(1); 再见!?<<endl; ?2?: goto system(?pause?); ?3?: } c; pre }< b; gl.Toposort(); ?; cout<<?该图的拓扑序列是: cout<<?---------------------------输出图的拓朴序列---------------------------------?<<endl; gl.PrintAdjoin(); cout<<endl<<?邻接表:?<<endl; gl.CreateAdjoin(); gl.InitAdjoin(); cout<<?-------------------------------建立图的邻接表-------------------------------?<<endl;>

热心网友 时间:2022-05-02 20:00

#include
<stdio.h>
#include
<stdlib.h>
#include
<malloc.h>
int
visited[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]);
visited[i]=1;//标记
EnQueue(&Q,i);
while(!QueueEmpty(&Q))
{
i=DeQueue(&Q);
for(j=0;j<G.n;j++)
if(G.edges[i][j]==1&&!visited[j])
{
printf("%c",G.vexs[j]);
visited[j]=1;
EnQueue(&Q,j);
}
}
}
main()
{
Mgraph
G;
CreateMGraph(&G);
printf("广度:\n");
BFS(G,0);
}
给你吧,有不懂再问我。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
南师足贴的功效和用法是什么 五指运湿膏能减肥吗 清颜六白膏真的管用吗 一个手机号建了两个微信号第一个微信号密码忘了怎么找回 ug最好用的版本是什么 带“沙鸥”的诗句大全(87句) 归计狎沙鸥的意思是什么 指期乘禁马,无暇狎沙鸥。 “无机终日狎沙鸥”的出处是哪里 “无暇狎沙鸥”的出处是哪里 对于无向图的邻接矩阵存储结构,判断是否有回路 试以邻接矩阵为存储结构,写出连通图的深度优先搜索算法。 怎样用邻接矩阵为存储结构创建一个无向图 已知带权有向图如图所示,画出该图的邻接矩阵存储结构. 数据结构利用邻接矩阵存储结构怎样求图中两个顶点之间的所有路径? 在线急求熟悉图的两种常用的存储结构,邻接矩阵和邻接表。 有向图的邻接矩阵存储 图的存储结构可以采用邻接矩阵和邻接表,对于个有n 个顶点,e条边的有向图, (1)计算存储结构分别 有向图的邻接表存储如图所示,请画出其邻接矩阵存储结构 数据结构:画出下图的邻接矩阵存储结构 最受政府机关办公欢迎的OA办公系统是什么? oa办公自动化软件适合政府机关用吗? oa办公自动化软件适合政府机关用吗? oa在政府办公自动化及电子政务的应用主要有哪些方面? oa在政府办公自动化及电子政务的应用主要有哪些方面? 怎么删除拷贝的word里的文字之间的空格 word空白页面上的漂浮的字怎么删除?复制页面会复制下来,但就是删不掉 删除word中复制过来的最底下的文字 word中如何删除带阴影文字?1000多页,一部分涂上了灰色背景。现在想单独删除带背景的部分。请指教! 2007 word中复制的内容怎么删除底纹? 要求采用邻接矩阵作为无向图的存储结构,邻接表作为有向图的存储结构,完成无向图和有向图的建立,并对建 存储结构为邻接矩阵,怎么编写无向图添加、删除一个顶点,添加、删除一条边的算法? 一个含有n个顶点的连通且无环无向图在其邻接矩阵存储结构共有多少个零元素 采用邻接矩阵存储结构对有向图进行拓扑排序的算法 数据结构,求无向图用邻接矩阵和邻接表的存储空间大小,怎么算? 编程实现以邻接表或邻接矩阵为存储结构,图的广度和深度优先搜索 哪里可以下载篮球裁判的教程? 哪里有篮球教学视频? qq表白套路对话有哪些呢? 在qq上怎么表白套路,qq表白套路台词 qq表白聊天套路对话从何演变而来? QQ表白套路对话有哪些 被qq表白套路对话过是什么样的感受? 喜欢一个女孩子,她也喜欢我,如何在QQ上委婉的表白 我想要个一个女的在QQ上表白,求一个套路! 求表白套路,最好是QQ上的,元旦节打算表白了 在QQ微信上表白有哪些套路 qq一问一答的套路表白 微信里的语音通话第二天为什么会播放失败,转换文字也转换失败,该如何恢复?_百度问一问 京发文件