题单介绍

[图的定义与基本术语](https://baike.baidu.com/item/%E5%9B%BE/13018767) 图的存储方式有邻接矩阵和邻接表两种。 邻接矩阵指的是用一个二维数组记录每个点对之间的边的长度,若点a到点b有一条长度为c的边,那么edge[a][b]=c。 对于稀疏图来说,这种存储方式太过浪费空间,所以一般会使用邻接表来存储。 ```cpp struct edge{ int x,y,z;//x表示这条边的起点,y表示这条边的终点,z表示这条边的权值 }; vector<edge> a[1000]; //当读入一条有向边t时 edge t; scanf("%d%d%d",&t.x,&t.y,&t.z); a[t.x].push_back(t); //若是无向图则在加上下面两句,即将边反过来再存下来: swap(t.x,t.y); a[t.x].push_back(t); ``` 图的深度优先遍历: ```cpp bool vst[1000]; void dfs(int x){ if(vst[x])return; vst[x]=1; printf("%d ",x); for(int i=0;i<a[x].size();i++) dfs(a[x][i]); } ``` 图的广度优先遍历: ```cpp void bfs(int s){ q.push(x); while(q.size()){ int x=q.front();q.pop(); printf("%d ",x); for(int i=0;i<a[x].size();i++){ if(vst[a[x][i]])continue; vst[a[x][i]]=1; q.push(a[x][i]); } } } ```

题目列表

  • 【深基18.例3】查找文献
  • 图的遍历
  • 杂务
  • [NOIP 2015 提高组] 信息传递
  • [USACO08DEC] Trick or Treat on the Farm G