图中任意两点都有路径连接的叫连通图,没有圈的连通图叫数,
有向图的边数等于顶点数-1,无向图的顶点数等于边数。有向图分出度(这个顶点出去的边数)和入度(进来的边数)
用程序表示图的方法有两种,邻接矩阵和邻接表;
邻接表分两种:
一种使用vector
struct edge{
int to,cost;
};
vector<edge>G[MAXV];
struct edge{
int to,cost;
edge(int _to,int _cost):to(_to),cost(_cost){}
};
vector<edge>G[MAXV];
int main()
{
int V,E;
scanf("%d%d",&V,&E);
for(int i=0;i<E;i++){
int s,t,w;
scanf("%d%d%d",&s,&t,&w);
G[s].push_back(edge(t,w));
G[t].push_back(edge(s,w));
}
}
另一种是用链表的思想
#include<iostream>
#include<cstdio>
#include<cstring>
const int MAXE=1e3+50;
const int MAXV=1e2+50;
struct edge{
int u,v,cost,next;
};
edge edges[MAXE];
int head[MAXV],tot;
void add_edge(int u,int v,int cost)
{
edges[tot].u=u;
edges[tot].v=v;
edges[tot].cost=cost;
edges[tot].next=head[u];
head[u]=tot++;
}
int main()
{
int V,E;
scanf("%d%d",&V,&E);
memset(head,-1,sizeof(head));
for(int i=1;i<=E;i++){
int s,t,cost;
scanf("%d%d%d",&s,&t,&cost);
add_edge(s,t,cost);
add_edge(t,s,cost);
}
for(int i=head[1];~i;i=edges[i].next){
printf("%d %d %d\n",edges[i].u,edges[i].v,edges[i].cost);
}
}