三种建图方式

int n=20;//点的个数
int m=21;//边的个数
const int maxn=25;
//邻接矩阵建图
int gra1[maxn][maxn];
void build(int n,int m,int from[],int to[],int weight[])
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)gra1[i][j]=0;//邻接矩阵清空
}
for(int i=0;i<m;i++)//无向带权图
{
gra1[from[i]][to[i]]=weight[i];
}
for(int i=0;i<m;i++)//无向带权图
{
gra1[from[i]][to[i]]=weight[i];
gra1[to[i]][from[i]]=weight[i];
}
}
//邻接表建图
vector<pair<int,int>>arraylist[maxn];
void build(int n,int m,int from[],int to[],int weight[])
{
for(int i=0;i<n;i++)arrarylist[i].clear();//邻接表清空
for(int i=0;i<m;i++)//有向带权图
{
arrarylist[from[i]].emplace_back({to[i],weight[i]});
}
for(int i=0;i<m;i++)//无向带权图
{
arrarylist[from[i]].emplace_back({to[i],weight[i]});
arrarylist[to[i]].emplace_back({from[i],weight[i]});
}
}
//链式前向星建图 (以边为主体)
int head[maxn];//index点号,val边号
int next[maxn];//index边号,val下一条边号
int tto[maxn];//index边号,val去往的点
int weightt[maxn];//权重
void build(int n,int m,int from[],int to[],int weight[])
{
//链式前向星清空
int cnt=1;//边号初始化为1
memset(head,0,sizeof(head));//每个点的头边号初始化为0
for(int i=0;i<m;i++)//建立有向带权图
{
next[cnt]=head[from[i]];
tto[cnt]=to[i];
weightt[cnt]=weight[i];
head[from[i]]=cnt++;
}
}
posted @   Marinaco  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
//雪花飘落效果
点击右上角即可分享
微信分享提示