图论-图的表示

  • 邻接矩阵
  • 关联矩阵
  • 邻接表
  • 数组表示
#include<cstdio>
#include<cstring>
using namespace std;
/*
	邻接表储存的是边的序号,它区分边是根据边的起点,相同起点的视作邻接;
*/ 
int first[1010],next[1010];//first[i]表示以顶点i为起点的第一条边的序号,-1即没有 
						   //next[i]表示以相同顶点为起点,序号为i的边之后的与其邻接的边的序号,-1即没有 
int u[1010],v[1010],w[1010];//u[i],v[i],w[i]分别表示序号为i的边的起点,终点,权值 
int main()
{ 
	int n,m;//n表示点的总数,m表示边的总数 
	scanf("%d%d",&n,&m);
	memset(first,-1,sizeof(first));//初始化 
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&u[i],&v[i],&w[i]);
		next[i]=first[u[i]];//更新 
		first[u[i]]=i;//更新 
	}
	//遍历 
	int k; 
	for(int i=1;i<=m;i++)
	{
		k=first[i];//确定第一条边的序号 
		printf("%d\n",i); 
		while(k!=-1)//当k==-1即没有下一条边时终止 
		{
			printf("%d %d\n",v[k],w[k]);
			k=next[k];//遍历下一条边 
		}
	}
	return 0;
}
  • vector表示
#include<iostream>
#include<vector>
using namespace std;
struct node
{
	int to;//to表示终点 
	int w;//w表示边的权值 
};
vector<node>map[1010];
int main()
{
	node e;
	int n,m,u,v,w;//n为顶点数目,m为边数目 
				  //u表示起点,v表示终点,w表示边的权值 
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v>>w;
		e.to=v;
		e.w=w;
		map[u].push_back(e);
	}
	//遍历
	node t;
	for(int i=1;i<=n;i++)
	{
		cout<<i<<"\n";
		for(vector<node>::iterator k=map[i].begin();k!=map[i].end();k++)
		{
			
			t=*k;
			cout<<t.to<<" "<<t.w<<"\n";
		}
	}
	return 0;
}
  • 弧表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值