IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构之图的存储与遍历 -> 正文阅读

[数据结构与算法]数据结构之图的存储与遍历

一 图的定义

G由两个集合VE组成,记为 G = ( V , E )

? V是顶点的有穷非空集合,EV中顶点偶对的有穷集,

? 这些顶点偶对称为边。通常V(G)E(G)分别称为图的顶点集合边集合

E(G)可以为空集。

二,分类

图又分为有向图无向图,个人理解数据间有无箭头

同时,把描述边的信息的数据叫做权值,又分了有权无权

端点和邻接点:

在一个无向图中,若存在一条边<vi,vj>, 则称vivj为该边的两个端点

并称它们互为邻结点

起点和终点

在一个有向图中,若存在一条边<vi,vj>, 则称该边是顶点vi的一条出边

vj的一条入边,称vi是起始端点(或起点),称vj是终止端

图中每个顶点的度是以该顶点为一端点的边的数目。记为 D(V)

入度和出度? 对于有向图,入度为以该顶点为终点的边的数目,出度为以该顶点为起点的边的目。

点(或终点,并称它们互为邻结点.

子图?:设有两个图G=VE G’=V’E’中,V’V的子集, E’E的子集,则称G’G子图。

图的存储:(还有许多方法,这些比较简单)

? ? ? ? ? ? ? ? 矩阵法:二维数组

? ? ? ? ? ? ? ? 邻接法:数组链表

二维数组法简易:

#include <stdio.h>
#include <assert.h>
#include <string.h>
#define MAX 100
typedef struct graph
{
	int arcnum;//边数
	int vexnum;//顶点数
	char vextex[MAX][MAX];//存放多个顶点,顶点用字符串描述
	int martrix[MAX][MAX];//权值
}GRAPH,*LPGRAPH;
//行和列定位
int SerrchPos(LPGRAPH g, const char* v)
{
	for (int i = 0; i < g->vextex; i++)
	{
		if (strcmp(g->vextex[i], v) == 0)
		{
			return i;
		}
	}
	return -1;
}

LPGRAPH CreateGraph()
{
	LPGRAPH g = (LPGRAPH)malloc(sizeof(GRAPH));
	assert(g);
	printf("输入顶点数和边数");
	scanf_s("%d%d", &g->arcnum, &g->vexnum);
	printf("输入顶点");
	for (int i = 0; i < g->vexnum; i++)
	{
		scanf_s("%s", g->vextex[i], 20);
	}
	//矩阵的初始化,所有位置置为0
	memset(g->martrix, 0, sizeof(int) * 100 * 100);
	
	char v1[20];
	char v2[20];//起点和终点
	int  vrt;//权值
	int i = 0;
	int j = 0;
	printf("输入各条边的信息\n");
	for (int k = 0; k < g->arcnum; k++)
	{
		scanf_s("%s%s%d", v1, 20, v2, 20, &vrt);
		//把权值填充到矩阵中,行和列的求解
		i = SerrchPos(g, v1);
		j = SerrchPos(g, v2);
        if(i==-1||j==-1)
        {
        printf("输入有误,请重新输入");
        k--;
        continue;
        }
		g->martrix[i][j] = vrt;
	}
	printf(".....");
}
//图的输出
void printGraph(LPGRAPH g)
{
	for (int i = 0; i < g->vexnum; i++)
	{
		printf("\t%s", g->vextex[i]);
	}
	printf("\n");//换行
	for (int i = 0; i < g->vexnum; i++)
	{
		printf("%s\t", g->vextex[i]);//打印顶点
		for (int j = 0; j < g->martrix; j++)
		{
			printf("%d\t", g->martrix[i][j]);
		}
		printf("\n");
	}
}

int main()
{
	
	LPGRAPH g = CreateGraph();
	printGraph(g);

	return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:56:50  更:2022-04-07 23:00:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:55:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码