邻接矩阵

采用邻接矩阵表示法创建无向网

 ̄綄美尐妖づ 提交于 2019-12-04 18:32:47
//采用邻接矩阵表示法创建无向网 #include <iostream> using namespace std; #define MaInt 32767 #define MVNum 100 #define OK 1 typedef char VerTextType; typedef int ArcType; typedef struct { VerTextType Vexs[MVNum]; ArcType arcs[MVNum][MVNum]; int vexnum, arcnum; }AMGrach; int LocateVex(AMGrach G, VerTextType v) { for (int i = 0;i < G.vexnum;i++) { if (G.Vexs[i] == v) return i; } return -1; } int CreateUDN(AMGrach& G) { int i, j, k; cout << "请输入总顶点数,总边数,以空格隔开:"; cin >> G.vexnum >> G.arcnum; cout << endl; cout << "输入点的名称,如a" << endl; for (i = 0;i < G.vexnum;i++) { cout << "input the " << i << " name"; cin >> G

采用邻接矩阵表示图的深度优先搜索遍历(与深度优先搜索遍历连通图的递归算法仅仅是DFS的遍历方式变了)

若如初见. 提交于 2019-12-04 18:32:36
//采用邻接矩阵表示图的深度优先搜索遍历(与深度优先搜索遍历连通图的递归算法仅仅是DFS的遍历方式变了) #include <iostream> using namespace std; #define MVNun 100 typedef char VerTexType; typedef int ArcType; typedef struct { VerTexType vexs[MVNun]; ArcType arcs[MVNun][MVNun]; int vexnum, arcnum; }Graph; bool visited[MVNun]; int FirstAdjVex(Graph G, int v); int NextAdjVex(Graph G, int v, int w); int LocateVex(Graph G, VerTexType v) { for (int i = 0;i < G.vexnum;++i) { if (G.vexs[i] == v) return i; } return -1; } void CreateUDN(Graph& G) { int i, j, k; cout << "请输入总顶点数,总边数 , 以空格隔开:"; cin >> G.vexnum >> G.arcnum; cout << endl; cout << "输入点的名称,如

图的邻接矩阵表示法&amp;amp;邻接表表示法

匿名 (未验证) 提交于 2019-12-03 00:36:02
图表示是一种多对多的关系的数据结构。因为线性表表示的是一种一对一的关系的数据结构,树表示的是一种一对多的数据结构,所以图把线性表和树都包含在内。 图由一个非空的有限顶点集合和一个有限边集合组成。 当我们描述图的时候,一定要包含以下两个元素: 1、Vertex 2、Edge i j Edge i j Vertex i j j i < i j > Edge i j Vertex i j j i 初始化一个图是,可以一条边也没有,但是不能一个顶点也没有。 那么怎么用代码表示一个图? 第一种方法是 邻接矩阵表示法 :即用矩阵,一个二维数组来表示一个图。 #include <stdio.h> #include <stdlib.h> #define MaxVertex 100 /*最大顶点数*/ #define INFINITY 65535 /*双字节无符号整数的最大值*/ typedef int Vertex; /*二维数组的下标表示顶点,为整型*/ typedef int WeightType; /*边的权值的类型*/ typedef char DataType; /*顶点存储的数据类型为字符型*/ /*图的数据结构*/ typedef struct GraphNode *PtrlGraphNode; struct GraphNode { int numv; /*顶点数*/ int

邻接表转换成邻接矩阵

匿名 (未验证) 提交于 2019-12-03 00:22:01
#include<string.h> #include<iostream> #include<stdlib.h> using namespace std; const int MaxSize = 100; struct ArcNode { int data; ArcNode *next; }; struct VertexNode { int vertex; ArcNode *firstedge; }; class List { private: int spot, border; int index; VertexNode root[MaxSize]; public: List() { spot = border = index = 0; } ~List() {} void push(int n, int e) { spot = n; border = e; for(int i = 0; i < spot; i++) { root[i].vertex = i; root[i].firstedge = NULL; } int i, j; while(index < border) { cin >> i >> j; ArcNode *s = new ArcNode; s->data = j; s->next = root[i].firstedge; root[i].firstedge

邻接矩阵的创建输出广度深度遍历

匿名 (未验证) 提交于 2019-12-02 23:36:01
源代码: #include<stdio.h> #define MaxInt 32767 //表示极大值 #define MVNum 100 //最大顶点数 typedef char VerTexType; //定义数据类型 typedef int ArcType; typedef struct { VerTexType vexs[MVNum]; //顶点表 ArcType arcs[MVNum][MVNum];//邻接矩阵 int vexnum,arcnum; //图的点数和边数 }AMGraph; typedef struct { char data[MVNum]; int front; //头指针 int rear; //尾指针 }SqQueue; bool visited[MVNum]; //访问标志数组 int LocateVex(AMGraph G,char v)//确定V在G中的位置 { int i; for(i = 0;i < G.vexnum;i++) { if(G.vexs[i]==v) //如果找到,返回其序号 break; } return i; } int CreateUDN(AMGraph &G) { int v1,v2,w=1,i,j; printf(“请输入总顶点数和总边数:”); scanf("%d %d",&G.vexnum,&G.arcnum);

矩阵乘法与邻接矩阵

不羁的心 提交于 2019-12-02 02:37:21
矩阵乘法与邻接矩阵 引例 \(1:\) [TJOI2017]可乐 相信很多人都能想出一个 \(\Theta(t\times m)\) 的做法.(虽然我没想出来,但这只是因为我菜) 问题简化一下,如果我们没有在原地停留和自爆两个操作,那么就是问从起点出发,走 \(t\) 步的不同路径数. 这个问题怎么做呢? 不考虑 \(Dp\) . 令该图的邻接矩阵是 \(G\) , 那么我们考虑 \(G^2\) 是个什么东西.(此处的幂运算是指矩阵的幂). 我们单独考虑某一行和某一列的相关运算 \(:\) 令其为 \(G_{a,i}\) 和 \(G_{i,b}\) , 令 \(G'\) 为相乘得到的矩阵,那么会有 \(:\) \[G'_{a,b} = \sum_{i=1}^m{G_{a,i}\times G_{i,b}}\] 容易发现,当且仅当 \(G_{a,i}\) 和 \(G_{i,b}\) 都不为零,即 \(i\) 点可连通 \(a,b\) 两点的时候上式的该项才为 \(1\) , 否则为零. 那么所有的这些情况累加起来,就是从 \(a\) 到 \(b\) 长度为 \(2\) 的路径条数.(即走 \(2\) 步从 \(a\) 走到 \(b\) 的方案数,长度是 \(2\) 是因为经过一个中间点.) 由此,我们可以得到, \(G^2\) 得到的矩阵其实表示了任意两点间长度为 \(2\)

邻接矩阵DFS,BFS代码实现

自古美人都是妖i 提交于 2019-12-01 23:31:11
// 邻接矩阵的深度和广度优先遍历 #include <stdio.h> #define OK 1 // 执行成功 #define ERROR 0 // 执行失败 #define TRUE 1 // 返回值为真 #define FALSE 0 // 返回值为假 typedef int Status; // 执行状态(OK、ERROR) typedef int Boolean; // 布尔值(TRUE、FALSE) typedef char VertexType; // 顶点元素类型 typedef int EdgeType; // 边上权值的类型 #define MAXSIZE 9 // 队列储存空间初始分配量 #define MAXVEX 100 // 最大顶点数 // 邻接矩阵结构(无向图) typedef struct { VertexType vexs[MAXVEX]; // 顶点表 EdgeType arc[MAXVEX][MAXVEX]; // 边表 int numNodes, numEdges; // 图的顶点数、边数 } MGraph; /************** 用到的队列结构与函数 **************/ // 循环队列顺序存储结构 typedef struct { int data[MAXSIZE]; // 用于存值的数组 int front; /

数据结构(图)

蹲街弑〆低调 提交于 2019-11-30 02:10:01
1.图:G=(V,E) V:顶点(数据元素)的有穷非空集合;E:边的有穷集合。 1)按有没有箭头可分为:有向图和无向图 2)若任意两个点都有一条边相连接则为完全图 3)稀疏图:有很少边或弧的图(e<nlogn) [带箭头的边称为弧] 稠密图:有较多边或弧的图 4)网:边/弧带权的图 6)邻接与关联(依附) 7)顶点的度:与该顶点相关联的边的数目,记为TD(v) 注:在有向图中,顶点的度等于该顶点的入度和出度之和。顶点v的入度是以v为终点的有向边的条数,记为ID(v);顶点v的出度是以v为始点的有向边的条数,记作OD(v)。 8)路径、路径长度、回路(环)、简单路径 路径:接续的边构成的顶点序列。 路径长度:路径上边或者弧的数目/权值之和。 回路(环):第一个顶点和终点可以相同外,其余顶点均不相同的路径。 简单回路(简单环):除路径七点和终点可以相同外,其他顶点均不相同的路径。 简单路径:除路径起点和终点相同外,其余顶点均不相同的路径。 9)连通图与强连通图 10)权和网 权:图中边或弧所具有的相关数称为权。表面从一个顶点到另一个顶点的距离或者耗费。 网:带权的图称为网。 11)子图 12)连通分量与强连通分量 13)极小连通子图、生成树与生成森林 2.图的存储结构 图的逻辑结构为:多对多;而图没有顺序存储结构,但可以借助二维数组来表示元素间的关系,即用数组表示法(邻接矩阵)

数据结构学习第十七天

随声附和 提交于 2019-11-29 03:34:12
14:39:22 2019-09-01 学习 图的两种遍历方法: ①DFS 深度优先搜索(Depth First Search) ②BFS 广度优先搜索(Breadth First Search) //利用队列实现广度优先 //邻接表实现 及 利用 邻接表 实现 深度优先搜索(DFS) 1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<malloc.h> 4 //表示图的两种方法 5 //邻接矩阵 G[N][N] N个顶点从0到N-1编号 6 //邻接表 表示 7 /*Graph Create(); //建立并返回空图 8 Graph InsertVertex(Graph G, Vertex v); //将v插入G 9 Graph InsertEdge(Graph G, Edge e); //将e插入G 10 void DFS(Graph G, Vertex v); //从顶点v出发深度优先遍历图G 11 void BFS(Graph G, Vertex v); //从顶点v出发宽度优先遍历图G 12 void ShortestPath(Graph G, Vertex v, int Dist[]); //计算图G中顶点v到任意其它顶点的最短距离 13 void MST(Graph G); /

noip纲要2012

自闭症网瘾萝莉.ら 提交于 2019-11-27 02:10:40
数据结构 队列 栈 堆 邻接矩阵 邻接表 边集数组 线段树 基础算法 搜索 分治 贪心 递推 各种排序 快排 冒泡 归并 拓扑 哈希表 并查集 图论算法 最小生成树(kruskal)prim我不会 = = 强连通分量tarjan 单源最短路spfa dijkstra 全图最短路floyd 二分图最大匹配匈牙利算法 最近公共祖先lca 离线tarjan算法 DP 简单线性动规 最大子段和、最大子矩阵和 字符串距离 背包问题 合并石子平方版 树形动规 转载于:https://www.cnblogs.com/neayo/archive/2012/11/08/2760101.html 来源: CSDN 作者: weixin_30294709 链接: https://blog.csdn.net/weixin_30294709/article/details/96113616