您的位置:首页 > 编程语言 > C语言/C++

关于图的邻接表C++实现

2015-04-14 10:17 211 查看
first数组的1-n号单元格分别用来存储1-n号顶点的第一条边的编号,初始的时候因为没有边加入所有都是-1.即first[u[i]]保存顶点point1[i]的第一条边的编号,next[i]存储“编号为i的边”的“下一条边”的编号。

next[i]=first[point1[i]];//first[]存储的是顶点的编号

first[point1[i]]=i;//next[]存储的是第i条边的下一条边的编号

4 5

1 4 9

2 4 6

1 2 5

4 3 8

1 3 7

读入第1条边后1 4 9

first next

1 -1

-1

-1

-1

读入第2条边后2 4 6

first next

1 -1

-1 -1

-1

2

读入第3条边后1 2 5

first next

3 1

-1 -1

-1 1

2

读入第4条边后4 3 8

first next

3 1

4 -1

-1 1

2 -1

读入第5条边后1 3 7

first next

5 -1

4 -1

-1 1

2 -1

3

#include<iostream>
using namespace std;
int main()
{
int points,edgs;
cin>>points>>edgs;
int point1[6],point2[6],quanzhi[6];
int first[5],next[5];//数组的大小要比实际的点数要大1
for (int i=1;i<=points;i++)
{
first[i]=-1;
}
int p1,p2,w;
for (i=1;i<=edgs;i++)
{
cin>>p1>>p2>>w;
point1[i]=p1;
point2[i]=p2;
quanzhi[i]=w;
next[i]=first[point1[i]];//first[]存储的是顶点的编号
first[point1[i]]=i;//next[]存储的是第i条边的下一条边的编号
}
int k=first[1];
while (k!=-1)
{
cout<<point1[k]<<" "<<point2[k]<<" "<<quanzhi[k]<<endl;
k=next[k];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: