c++图论基础(2)

目录

图的存储方式:

邻接矩阵:

代码实现:

邻接表:

代码实现:

邻接矩阵邻接表对比:

带权图:

邻接矩阵存储:

邻接表存储(代码实现):


图的存储方式:

邻接矩阵:

无向图的邻接矩阵是对称的,2是自环

用来计算顶点的入度和出度,入度看行,出度看列

代码实现:
cpp 复制代码
int G[n][n];
memset(G,0,sizeof(G));  //初始化数组0 
G[u][v]=G[v][u]=1;//插入无向边
G[u][v]=1;//插入有向边

邻接表:

当数据中0较多,比较占用内存空间,可以考虑用邻接表

每一行第一列表示的是最外层vector数组的下标

代码实现:
cpp 复制代码
//用二维动态数组来存储邻接表
#include<iostream>
#include<vector>
using namespace std;
int main(){
	vector<int>G[11];  
	int m;
	cin>>m;//m条边
	for(int i=0;i<m;i++){
		int a,b; //从顶点a指向b的边
		cin>>a>>b;
		G[a].push_back(b);
		//G[b].push_back(a);存无向图a与b互换
	}
	for(int i=1;i<=m;i++){
		cout<<i<<" ";
		for(int j=0;j<G[i-1].size();j++){
			cout<<G[i][j]<<" ";
		}cout<<endl;
	}
	return 0;
}

邻接矩阵邻接表对比:

带权图:

边的权值简称边权

邻接矩阵存储:

邻接表存储(代码实现):

cpp 复制代码
#include<iostream>
#include<vector>
using namespace std;
struct Node{
	int v,w;
};
vector<Node>G[11];//二维动态数组存储
void insert1(int u,int v,int w){
	Node temp;
	temp.v=v;
	temp.w=w;
	G[u].push_back(temp);
} 
void insert2(int u,int v,int w){
	insert1(u,v,w);
	//insert1(v,u,w);如果要存无向图 
}
void input(){
	int m;
	cin>>m;//10  假设要存入的边为10
	for(int i=0;i<m;i++){
		int u,v,w;
		cin>>u>>v>>w; //从u指向v的有向边,边权w
		insert2(u,v,w);
	}
}
void output(){    
	for(int i=1;i<=10;i++){
		for(int j=0;j<G[i].size();j++){
			cout<<i<<" "<<G[i][j].v<<" "<<G[i][j].w<<endl;
		}
	}
}
int main(){
	input();
	output();
	return 0;
}
相关推荐
郑州光合科技余经理8 分钟前
本地生活平台搭建:统一订单表与多后台切换怎么拆
java·开发语言·前端·系统架构·uni-app·php·ai编程
天下无敌笨笨熊14 分钟前
C#视频开发心得
开发语言·c#·音视频
开心大爆炸38 分钟前
ubuntu20.4 安装ros1 noetic版本流程
c++
淼澄研学1 小时前
基于Docker与iptables的AI智能体网络隔离实操指南
开发语言·python
莫陌尛.1 小时前
Java核心知识点:直接内存、CPU密集型线程池、并行流对比文档
java·开发语言
西峰u1 小时前
Java多线程初阶完整总结|线程、锁、volatile、等待通知、常见案例
java·开发语言·jvm
夜雨声烦丿1 小时前
从需求到页面:日期计算器应用的 ArkTS 原生实现
开发语言·javascript·华为·harmonyos
程序员雪球2 小时前
本地IDEA打断点debug容器
java·开发语言
老白干2 小时前
基于枚举 + 注解的 Java 数据脱敏实践(fastjson 序列化场景)
java·开发语言
半亩码田2 小时前
C#转Python第4.1篇:当 try-catch 遇上 try-except:异常处理的大不同
开发语言·python·c#