链式前向星

Posted tecode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链式前向星相关的知识,希望对你有一定的参考价值。

该算法学习来自 b站

示例代码 1

输出的访问顺序与输入相反

#include <bits/stdc++.h>
#define LL long long
#define Pi acos(-1.0)
#define INF 2147483646
#define eps 1e-9
#define MS 100
#define mss 17
using namespace std;
// Notice the data size
// Notice the input and output 

int n,u,v,w,tot;
struct node{
	int to;
	int nxt;
	int val;
}edge[MS];
int head[MS];

void init(){
	memset(head,-1,sizeof head);
}

void add(int u,int v,int w){
	edge[tot].to = v;
	edge[tot].val = w;
	edge[tot].nxt = head[u];
	head[u] = tot++;
}

void input(){
	cin >> n;
	for(int i=0;i<n;i++){
		cin >> u >> v >> w;
		add(u,v,w);
		add(v,u,w);
	}
}

void output(){
	for(int i=0;i<MS;i++){
		for(int j=head[i];j!=-1;j=edge[j].nxt){
			cout << i << "->" << edge[j].to << ":" << edge[j].val << endl;
		}
	}
}

int main() {
	init(); 
	input();
	output();
	
	return 0; 
}

/*
intput:
5
1 2 2 
1 3 4  
2 3 8  
4 5 6 
8 9 3 

output:
1->3:4
1->2:2
2->3:8
2->1:2
3->2:8
3->1:4
4->5:6
5->4:6
8->9:3
9->8:3
*/

示例代码 2

感觉用 vector 更加好理解 ,虽然不是链式前向星了 ,但是代码简单 ,其输出访问顺序与输入相同 .

#include <bits/stdc++.h>
#define LL long long
#define Pi acos(-1.0)
#define INF 2147483646
#define eps 1e-9
#define MS 10
#define mss 17
using namespace std;
// Notice the data size
// Notice the input and output 

int n,u,v,w;
int val[MS][MS]; 
vector<int> mp[MS];

void input(){
	for(int i=0;i<n;i++){
		cin >> u >> v >> w;
		val[u][v] = val[v][u] = w;
		mp[u].push_back(v);
		mp[v].push_back(u);
	}
}

void output(){
	for(int i=0;i<10;i++){
		for(auto &it:mp[i]){
			cout << i << "->" << it << ":" << val[i][it] << endl;
		}
	}
}

int main() {
	cin >> n;
	input();
	output();
	
	return 0; 
}

/*
intput:
5
1 2 2 
1 3 4  
2 3 8  
4 5 6 
8 9 3

output:
1->2:2
1->3:4
2->1:2
2->3:8
3->1:4
3->2:8
4->5:6
5->4:6
8->9:3
9->8:3
*/

以上是关于链式前向星的主要内容,如果未能解决你的问题,请参考以下文章

前向星和链式前向星

前向星链式前向星实现以及它的遍历

链式前向星

图的存储:链式前向星(边集数组)

链式前向星

链式前向星