摘要: int n; // n表示点数int h[N], e[M], ne[M], idx; // 邻接表存储图int color[N]; // 表示每个点的颜色,-1表示未染色,0表示白色,1表示黑色 // 参数:u表示当前节点,c表示当前点的颜色bool dfs(int u, int c){ color 阅读全文
posted @ 2022-12-04 20:59 山海自有归期 阅读(26) 评论(0) 推荐(0) 编辑
摘要: int n1, n2; // n1表示第一个集合中的点数,n2表示第二个集合中的点数int h[N], e[M], ne[M], idx; // 邻接表存储所有边,匈牙利算法中只会用到从第一个集合指向第二个集合的边,所以这里只用存一个方向的边int match[N]; // 存储第二个集合中的每个点 阅读全文
posted @ 2022-12-04 20:59 山海自有归期 阅读(15) 评论(0) 推荐(0) 编辑
摘要: int dfs(int u){ st[u] = true; // st[u] 表示点u已经被遍历过 for (int i = h[u]; i != -1; i = ne[i]) { int j = e[i]; if (!st[j]) dfs(j); }} 阅读全文
posted @ 2022-12-04 20:58 山海自有归期 阅读(20) 评论(0) 推荐(0) 编辑
摘要: queue<int> q;st[1] = true; // 表示1号点已经被遍历过q.push(1); while (q.size()){ int t = q.front(); q.pop(); for (int i = h[t]; i != -1; i = ne[i]) { int j = e[i 阅读全文
posted @ 2022-12-04 20:58 山海自有归期 阅读(16) 评论(0) 推荐(0) 编辑
摘要: bool topsort(){ int hh = 0, tt = -1; // d[i] 存储点i的入度 for (int i = 1; i <= n; i ++ ) if (!d[i]) q[ ++ tt] = i; while (hh <= tt) { int t = q[hh ++ ]; fo 阅读全文
posted @ 2022-12-04 20:58 山海自有归期 阅读(35) 评论(0) 推荐(0) 编辑
摘要: int g[N][N]; // 存储每条边int dist[N]; // 存储1号点到每个点的最短距离bool st[N]; // 存储每个点的最短路是否已经确定 // 求1号点到n号点的最短路,如果不存在则返回-1int dijkstra(){ memset(dist, 0x3f, sizeof 阅读全文
posted @ 2022-12-04 20:58 山海自有归期 阅读(15) 评论(0) 推荐(0) 编辑
摘要: typedef pair<int, int> PII; int n; // 点的数量int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边int dist[N]; // 存储所有点到1号点的距离bool st[N]; // 存储每个点的最短距离是否已确定 // 求 阅读全文
posted @ 2022-12-04 20:58 山海自有归期 阅读(13) 评论(0) 推荐(0) 编辑
摘要: int n, m; // n表示点数,m表示边数int dist[N]; // dist[x]存储1到x的最短路距离 struct Edge // 边,a表示出点,b表示入点,w表示边的权重{ int a, b, w;}edges[M]; // 求1到n的最短路距离,如果无法从1走到n,则返回-1。 阅读全文
posted @ 2022-12-04 20:58 山海自有归期 阅读(28) 评论(0) 推荐(0) 编辑
摘要: int n; // 总点数int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边int dist[N]; // 存储每个点到1号点的最短距离bool st[N]; // 存储每个点是否在队列中 // 求1号点到n号点的最短路距离,如果从1号点无法走到n号点则返回- 阅读全文
posted @ 2022-12-04 20:58 山海自有归期 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 初始化: for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if (i == j) d[i][j] = 0; else d[i][j] = INF; // 算法结束后,d[a][b]表示a到b的最短距离void floyd() 阅读全文
posted @ 2022-12-04 20:58 山海自有归期 阅读(10) 评论(0) 推荐(0) 编辑
摘要: int n; // n表示点数int g[N][N]; // 邻接矩阵,存储所有边int dist[N]; // 存储其他点到当前最小生成树的距离bool st[N]; // 存储每个点是否已经在生成树中 // 如果图不连通,则返回INF(值是0x3f3f3f3f), 否则返回最小生成树的树边权重之 阅读全文
posted @ 2022-12-04 20:58 山海自有归期 阅读(23) 评论(0) 推荐(0) 编辑
摘要: int n, m; // n是点数,m是边数int p[N]; // 并查集的父节点数组 struct Edge // 存储边{ int a, b, w; bool operator< (const Edge &W)const { return w < W.w; }}edges[M]; int fi 阅读全文
posted @ 2022-12-04 20:58 山海自有归期 阅读(18) 评论(0) 推荐(0) 编辑
摘要: // 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int h[N], e[N], ne[N], idx; // 添加一条边a->bvoid add(int a, int b){ e[idx] = b, ne[idx] = h[a], h[a] = idx ++ 阅读全文
posted @ 2022-12-04 20:57 山海自有归期 阅读(40) 评论(0) 推荐(0) 编辑