图论-存取图的技巧-按起点分类
边的三个要素
- 边(权值)(暂时不考虑)
- 起点
- 终点
- 新增元素
- 连接到上一条起点相同的边的传送门
- 以某结点为起始结点的当前线段的序数
思路
每读入一条线段,把以该线段起点的当前线段的序数连接到当前读入的这一条上(从而实现与上一条具有相同起点的边的联系),并进行更新,方便下一条相同起点线段的联系(预留一个接口/位置)
代码实现
#include<iostream>
#include<stdio.h>
using namespace std;
int V,E;
struct edge{
int from,to,next;
};
edge edges[102];
int cur_link[100];
int main()
{
int u,v;
cin>>V>>E;
for(register int i=1;i<=E;i++)
{
cin>>edges[i].from>>edges[i].to;
edges[i].next=cur_link[edges[i].from];//绑定好上一条
cur_link[edges[i].from]=i;//更新状态
// u=edges[i].from;v=edges[i].to;
// edges[i].next=cur_link[u];
// cur_link[u]=i;
}
for(register int i=1;i<=V;i++)
{
cout<<"当前是以"<<i<<"为结点:"<<endl;
for(int order=cur_link[i];order!=0;order=edges[order].next)
{
printf("第%d条: 起点是%d,终点是%d
",order,edges[order].from,edges[order].to);
}
}
return 0;
}
输入
4 4
1 3
1 2
1 4
2 3
输出
当前是以1为结点:
第3条: 起点是1,终点是4
第2条: 起点是1,终点是2
第1条: 起点是1,终点是3
当前是以2为结点:
第4条: 起点是2,终点是3
当前是以3为结点:
当前是以4为结点: