问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

...图的邻接表和邻接矩阵数据结构的定义、创建;图的深度优先遍历...

发布网友 发布时间:2024-09-29 16:40

我来回答

1个回答

热心网友 时间:2024-10-11 02:09

/*
                程序1:邻接表的dfs,bfs
                其中n是点的个数,m是边的个数,你需要输入m条有向边,如果要无向只需要反过来多加一遍即可。
*/
#include <stdio.h>
#include <string.h>
#define MAXM 100000
#define MAXN 10000
int next[MAXM],first[MAXN],en[MAXM],n,m,flag[MAXN],pd,dl[MAXN],head,tail;

void input_data()
{
                scanf("%d%d",&n,&m);
                int i,x,y;
                for (i=1;i<=m;i++)
                                {
                                                int x,y;
                                                scanf("%d%d",&x,&y);
                                                next[i]=first[x];
                                                first[x]=i;
                                                en[i]=y;
                                }
}

void pre()
{
                memset(flag,0,sizeof(flag));
                pd=0;
}

void dfs(int x)
{
                flag[x]=1;
                if (!pd)
                                {
                                                pd=1;
                                                printf("%d",x);
                                }else
                                                printf(" %d",x);
                int p=first[x];
                while (p!=0)
                                {
                                                int y=en[p];
                                                if (!flag[y])   dfs(y);
                                                p=next[p];
                                }
}

void bfs(int k)
{
                head=0;tail=1;
                flag[k]=1;dl[1]=k;
                while (head<tail)
                                {
                                                int x=dl[++head];
                                                if (!pd)
                                                                {
                                                                                pd=1;
                                                                                printf("%d",x);
                                                                }else printf(" %d",x);
                                                int p=first[x];
                                                while (p!=0)
                                                                {
                                                                                int y=en[p];
                                                                                if (!flag[y])
                                                                                                {
                                                                                                                flag[y]=1;
                                                                                                                dl[++tail]=y;
                                                                                                }
                                                                                p=next[p];
                                                                }
                                }
}

int main()
{
                input_data();//读入图信息。
                pre();//初始化
                printf("图的深度优先遍历结果:");
                int i;
                for (i=1;i<=n;i++)//对整张图进行dfs; 加这个for主要是为了防止不多个子图的情况
                                if (!flag[i])
                                                dfs(i);
                printf("\n-------------------------------------------------------------\n");
                pre();//初始化
                printf("图的广度优先遍历结果为:");
                for (i=1;i<=n;i++)
                                if (!flag[i])
                                                bfs(i);
                printf("\n----------------------end------------------------------------\n");
                return 0;
}/*
                程序2:邻接矩阵
                图的广度优先遍历和深度优先遍历
*/
#include <stdio.h>
#include <string.h>
#define MAXN 1000

int n,m,w[MAXN][MAXN],flag[MAXN],pd,dl[MAXN];

void input_data()
{
                scanf("%d%d",&n,&m);
                int i;
                for (i=1;i<=m;i++)
                                {
                                                int x,y;
                                                scanf("%d%d",&x,&y);
                                                w[x][0]++;
                                                w[x][w[x][0]]=y;
                                }
}

void pre()
{
                memset(flag,0,sizeof(flag));
                pd=0;
}

void dfs(int x)
{
                flag[x]=1;
                if (!pd)
                                {
                                                pd=1;
                                                printf("%d",x);
                                }else printf(" %d",x);
                int i;
                for (i=1;i<=w[x][0];i++)
                                {
                                                int y=w[x][i];
                                                if (!flag[y])   dfs(y);
                                }
}

void bfs(int t)
{
                int head=0,tail=1;
                dl[1]=t;flag[t]=1;
                while (head<tail)
                {
                                int x=dl[++head];
                                if (!pd)
                                                {
                                                                pd=1;
                                                                printf("%d",x);
                                                }else printf(" %d",x);
                                int i;
                                for (i=1;i<=w[x][0];i++)
                                                {
                                                                int y=w[x][i];
                                                                if (!flag[y])
                                                                                {
                                                                                                flag[y]=1;
                                                                                                dl[++tail]=y;
                                                                                }
                                                }
                }
}

int main()
{
                input_data();
                printf("图的深度优先遍历结果:");
                pre();
                int i;
                for (i=1;i<=n;i++)
                                if (!flag[i])
                                                dfs(i);
                printf("\n---------------------------------------------------------------\n");
                printf("图的广度优先遍历结果:");
                pre();
                for (i=1;i<=n;i++)
                                if (!flag[i])
                                                bfs(i);
                printf("\n-----------------------------end--------------------------------\n");
                return 0;
}
用C语言实现 图的邻接表和邻接矩阵数据结构的定义、创建;图的深度优先...

/* 程序1:邻接表的dfs,bfs 其中n是点的个数,m是边的个数,你需要输入m条有向边,如果要无向只需要反过来多加一遍即可。*/#include &lt;stdio.h&gt;#include &lt;string.h&gt;#define MAXM 100000#define MAXN 10000int next[MAXM],first[MAXN],en[MAXM],n,m,flag[MAXN],pd,dl[MAXN],hea...

非结构化数据如何可视化呈现?

通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准...

...1创建图的邻接矩阵和邻接表 2验证图的深度优先、广度优先遍历算法 3...

1、邻接表表示的图中分别用DFS和BFS遍历 include &lt;cstdio&gt; include &lt;cstring&gt; include &lt;queue&gt; using namespace std;/// // Description: 图的邻接表的结点 struct Edge { int dest; // 目标结点下标 // int value; // 路径长度 Edge *link; ...

如何学习图论的基本知识?

1.图的定义和基本概念:了解什么是图,节点、边、路径、环等基本概念。2.图的表示方法:掌握图的邻接矩阵和邻接表两种常用的表示方法。3.图的遍历算法:学习深度优先搜索(DFS)和广度优先搜索(BFS)两种基本的图遍历算法。4.最小生成树:了解最小生成树的概念,掌握Prim算法和Kruskal算法两种求解最小...

图的遍历:深度优先搜索(邻接矩阵存放)

int visited[9]; /* 遍历标记数组 */ /*根据已有的信息建立邻接表*/ void creategraph(int node[20][2],int num)/*num指的是图的边数*/ { graph newnode; /*指向新节点的指针定义*/ graph ptr;int from; /* 边的起点 */ int to; /* 边的终点 */ int i;...

数据结构课程设计是什么

2、 主要的数据结构设计说明 图邻接矩阵、邻接表的建立。图的深度优先遍历、拓扑排序、顶点之间的最短路径。3、 程序的主要模板template &lt;class Type&gt; class Graph 4、 程序的主要函数 Graph、link()、DFTraverse()、TopologicalOrder()、TopologicalOrder()、GetVertexPos()、ShortestPath 三、上机结果及...

c语言图的遍历,邻接表存储,深度,广度优先遍历

(1)图的建立,按采用邻接表作为存储结构。(2)从指定顶点出发进行深度优先搜索遍历。(3)从指定顶点出发进行广度优先搜索遍历。include"stdio.h"include"string.h"include"stdlib.h"include"math.h"define MAX_INT 1000 define MAX_VERTEX_NUM 20 define MAX_QUEUE_NUMBER 20 typedef struct ArcNode...

图论算法理论、实现及应用目录

在图的基本概念与存储部分,详细阐述了有向图与无向图、完全图、稀疏图、稠密图、顶点与边的关系、顶点的度数与度序列、二部图、图的同构、子图与生成树以及路径与连通性等概念,同时介绍了图的邻接矩阵和邻接表存储方法,并分析了它们的优缺点。接着,文章深入探讨了图的遍历技术,包括深度优先搜索(...

如何根据带权邻接矩阵推出深度优先遍历

深度优先遍历,先访问第一行不为0的点为1,让后转至1行,找到第二个不为0 的点,3,转至3所在的行,同理找到4,再找到2 。2行中的3与前面重复,无其他不为0的点,剩下的点选5,再找到5行中不为0的点6。深度优先遍历的特点是遍历与这个点相邻的点,了解了邻接表的特点后就会觉得简单了。

计算机都包含什么课程?

1、计算机数学基础 本课程是计算机专业必修的数学基础知识。针对计算机专业的特点,加强了Mathematica数学软件的应用。包含4大模块:微积分、线性代数、概率论。在微积分模块中包含了一元微积分、常微分方程、多元微积分初步、无穷级数、数值计算初步等内容。在线性代数模块中包含了行列式、矩阵、线性方程组的...

采用邻接表存储的图的深度优先遍历算法类似于二叉树的先序遍历,为什么...

这是因为图的深度优先遍历算法先访问所在结点,再访问它的邻接点。与二叉树的先序遍历先访问子树的根结点,再访问它的孩子结点(邻接点)类似。图的广度优先遍历算法类似于二叉树的按层次遍历。先序遍历也叫做先根遍历、前序遍历,可记做根左右(二叉树父结点向下先左后右)。首先访问根结点然后遍历左...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
近代史鸦片战争 《坎巴拉太空计划》教程高级建造尾翼:学习高级建造技巧:坎巴拉太空计... 苏州会计从业资格证2011年培训,规模,师资最强当属新科。培训科目初级... 颁结婚证纪念册多少钱 禹州市去那里办理准生证? 2020年禹州市办理离婚手续流程,需要预约吗? 常熟2011会计从业资格考试成绩已经出来,为什么苏州市区的还没有出来... 下列说法正确的是( )A.卢瑟福a粒子散射实验中,产生大角度散射的主要原因... 怎样跟女领导搞好关系? 试解释一个中性原子吸收一个电子通常要放出能量的现象. 图论:图的四种最短路径算法 发黄的灯罩是什么材质 斗鱼长什么样子 有没有一种鱼叫斗鱼 长什么样子的 生活在哪里的 哈尔滨有哪些味道很好的烧烤店? 哈尔滨有哪些味道超赞的烧烤店? 《新喜剧之王》豆瓣评分低至5.8,被“绑架”的豆瓣越来失控! 易褪色布料有哪些 有哪些厚布料 先秦时期的主要毛纤维是什么? 苹果手机照片怎样设置允许访问权限? 苹果手机相机怎样设置允许所有应用使用权限? 苹果手机怎么设置所有照片权限 苹果手机怎么设置允许访问相机权限? c=1000pw/M这个公式是怎么推导出来的? CT对人体有害,会使人患上癌症是吗? 牡丹江劳动养老保险如何办理 我的手机是魅族MX4,下载了个LT来电闪光,怎么老是自动关闭的,求怎么设置... 王如用予,则岂徒齐民安 翰林观天下商铺怎么样?好不好?值不值得买? 牛顿第二定律在做题时在什么情况下用什么公式? 例如F·cos37-m(mg-F... 红皮型牛皮癣的早期症状 银屑病常见的几种类型!密集恐惧者慎入! 北京室内设计院有哪些 北京的设计院有哪些 ...新浪微博,写微博发送失败 ,显示没验证邮箱,请问如何在新浪微博上验... ...邮箱未验证 什么意思 还说要去weibo.com验证 怎么弄 3秒炸掉大疆无人机的“干扰器”是个什么鬼 做梦梦见自己在梦里哭的很伤心是什么征兆 装修公司签约前需要审核客户的房产证吗 装修房子是安房产证上的面积算的吗 装修合同有这么一条,房产证面积(加上赠送面积)*单价,这个意思是包含赠送... 索尼VRD-MC6刻录时间 索尼HDR-CX270E镜头参数 数码摄像机拍的录像要放到46寸以上的电视上看,要拍多大的像素啊? 运行过程中读写flash不影响速度 索尼ICD-PX720索尼ICD-PX720-主要参数 lpf合伙是什么意思? ecc的特点和优点 mt6687是什么芯片
  • 焦点

最新推荐

猜你喜欢

热门推荐