笨鸟先飞,一次学不会就再学一次
目录
一:图论
这一部分还没开始做题,刚开始看资料
以下是这周学习到的有关图论的知识
1:哥尼斯堡七桥问题(现在是俄罗斯的加里宁格勒)、
在哥尼斯堡(加里宁格勒) 的一个公园里, 有七座桥将普雷格尔河中两个岛及岛与河岸连接起来 . 问是否可能从这四块陆地中任一块出发, 恰好通过每座桥一次, 再回到起点?
由这个问题我得到了如果枚举每一种可能,就是7的阶乘,把该问题抽象成图,仔细阅读欧拉回路后得知,这个图的各个节点必须是联通的,和每个节点相连的线段必须是偶数,否则就不能回来。
2: 图的基本概念。
CSDN上有很多,此处省略。
3:图的存储与遍历
a.可以用邻接矩阵实现
用一个一维数组存储图中顶点的信息
,
用一个二维数组
(
矩阵
)
表示图中各顶点之
间的邻接关系
.
#define MAXN 100
int main()
{
int n, m, u, v, map[MAXN][MAXN];
memset(map, 0, sizeof(map));//初始化,元素清零
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++)
{
scanf("%d%d", &u, &v);
map[u-1][v-1] = 1; map[v-1][u-1] = 1;//无向图需要
}
//其它操作
return 0;
}
图的DFS遍历是很多算法的基础,所以一定要掌握好DFS;
邻接矩阵的特点:
空间复杂度:O(n2)
可以O(1)查询点对间的边数(或相邻情况)
邻接矩阵的缺点:空间复杂度大,处理稀疏图效率低,不便于处理多 重图边上的附加信息。
b.邻接表
邻接表可以用四种方式去实现,第一种是动态链表,第二种是用vector实现。第三种是用静态链表实现也就是纯数组实现&#x