今天自学图的邻接链表建立,网上看了一些博客,一个基础内容竟然被写的非常诡异。关于邻接链表的理论知识这里就不在阐述了。下面给出非常通俗易懂的一个建立无向图的邻接链表的代码。有时间将有向图的也补上。
#include <iostream>
#include <vector>
#define maxn 50 //最多五十个点
using namespace std;
struct node
{
int nodenum; //记录点的号码,实际在该程序中我直接用 N 数组的下标代替该号码了
vector<int>list; //把与该点有边相连的点记录在动态该数组里
};
int n,m;//分别指点的个数 边的条数
node N[maxn];
int main()
{
while(cin>>n>>m&&(n+m))
{
int v1,v2;
for(int i=0;i<m;i++)
{
cin>>v1>>v2; //输入边的两个端点
N[v1].list.push_back(v2);//将于该点有联系的点压入该链中
N[v2].list.push_back(v1);
}
for(int i=1;i<=n;i++)
{
cout<<i<<":它连接的点有: ";
for(int j=0;j<N[i].list.size();j++)cout<<N[i].list[j]<<' ';//依次输出与与他有联系的点
cout<<'\n';
}
}
}
/*
样例输入1:
4 5
1 3
1 2
1 4
2 3
2 4
它表示的是下面一个图
0 1 1 1
1 0 1 1
1 1 0 0
1 1 0 0
*/