前向星:
构造方法:将边存放在数组中,然后按照起点顺序进行排序就构造完成了。
analystS:可以存储重边
analystW:不能直接判断任意两个顶点之间是否有边
应用:边数多,并且两点之间有平行边。
code:
#include
#include
#include
#include
using namespace std;
#define maxn 100
#define maxm 100
int head[maxn];
struct Record
{
int head;
int end;
}record[maxn];
struct node
{
int from; //起点
int to; //终点
int w; //权值
bool operator < (const node &b) const
{
if(this->from == b.from && this->to == b.to)
return this->w < b.w;
return this->from < b.from;
}
}edge[maxm];
int main()
{
int m,n;
int i,j;
int a,b,c;
cin>>n>>m; //n个点,m条边
for(i = 1; i <= n; i++) // 对点进行初始化处理
{
record[i].head = -1; //顶点的初始位置设为-1
record[i].end = 0;//出度为0
}
for(i = 1; i <= m; i++)
{
cin>>a>>b>>c;
edge[i].from = a;
edge[i].to = b;
edge[i].w = c;
record[a].end++; //记录点a的出度
}
sort(edge+1,edge+m+1); // 排序
int k = 1;
//排序后,求每个顶点在数组中的起始位置和终止位置
while(k <= m)
{
record[edge[k].from].head = k;
record[edge[k].from].end += record[edge[k].from].head-1;
k = record[edge[k].from].end + 1;
}
cout<<"--------------------------------------------"<