1.找点存边
建边的方法
1.邻接矩阵
int a[505][505];
int x,y,n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d %d",&x,&y,&z);
a[x][y]=z;
a[y][x]=z;//双向边
}
2.用vector建边
struct node
{
int t,val;
};
vector<node>v1[maxn];//有权值用结构体存
vector<int>v[maxn];//没有权值用int
int main()
{
int n,x,y,val;
for(i=1;i<=n;i++)
v[i].clear();
for(i=1;i<=n;i++)
{
scanf("%d %d",&x,&y);
v[x].push_back(y);//没有权值单向
}
for(i=1;i<=n;i++)
{
scanf("%d %d",&x,&y,&val);
v[x].push_back(node{y,val});
v[y].push_back(node{x,val});
}
}
3.用邻接表存
struct node
{
int to,next,val;
}edge[maxn*2];//双向边则乘二
void init()
{
sign=0;
for(int i=0;i<=n;i++)
head[i]=-1;
}
void add(int u,int v,int val)//u起点,v终点,val权值
{
edge[sign].to=v;
edge[sign].next=head[u];
edge[sign].val=val;
head[u]=sign++;
}