三种建图方式

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 @ 2025-01-11 15:47  Marinaco  阅读(26)  评论(0)    收藏  举报
//雪花飘落效果