标签:from 信息 its form for clu 数据 main 时间复杂度
前向星是一种通过存储边信息的方式存储图的数据结构。它的构造方式非常简单,读入每条边的信息,将边存放在数组中,把数组中的边按照起点顺序排序。
前向星就构造完了。
由于涉及排序,前向星的构造时间复杂度与排序算法有关,一般情况下时间复杂度为O(mlogm)。空间上,需要两个数组,空间复杂度为O(m+n)。
前向星的优点可以应对非常多的情况,可以储存重边,但不能直接判断两个顶点之间是否有边,而且排序需要浪费一些时间。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 100005;
int head[maxn];
struct node {//存边的结构数据
	int form;
	int to;
	int w;
}edge[maxn];
bool cmp(node a, node b) {//比较函数
	if(a.from == b.from && a.to == b.to) return a.w < b.w;
	if(a.from == b.from) return a.to < b.to;
	return a.from < b.from; 
}
int main() {
	//freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	int n, m;
	cin >> n >> m;//读取数据
	for(int i = 0; i < m; i++) cin >> edge[i].form >> edge[i].to >> edge[i].w;
	sort(edge,edge+m,cmp);
	memset(head, -1, sizeof(head));
	head[edge[0].from] = 0;
	for(int i = 1; i < m; i++) 
		if(edge[i].from != edge[i-1].from) 
			head[edge[i].from] = i;
	for(int i = 1; i <= n; i++) {//遍历
		for(int k = head[i];edge[k].from == i && k < m; k++) {
			cout << edge[k].from << " "<< edge[k].to << " " << edge[k].w << endl;
		}
	}
	return 0;
}
标签:from 信息 its form for clu 数据 main 时间复杂度
原文地址:http://www.cnblogs.com/creativepower/p/6664329.html