数据结构基础 - 图
文章平均质量分 72
buxizhizhou530
这个作者很懒,什么都没留下…
展开
-
UVa 572 油田
题目:相当于有一个m行n列的格子矩阵,每个格子要么@要么*,两个格子是连通的当且仅当这两个格子都是@、且一个格子和另一个是水平、垂直或对角线相邻,即一个格子在另一个格子的周围八个格子范围内。最后求连通块的个数。思路:和书上例题黑白格子一样,只是一个01,一个*@,稍微改一下就可以了。即通过dfs(x,y)递归地深度优先遍历。Code:#include#include#define原创 2014-08-31 20:49:32 · 1345 阅读 · 0 评论 -
UVa 10305 给任务排序
题意:给定一些任务,和任务序列 i j,意思是要求任务 i 必须要在任务 j 前完成。给出这样的任务序列。思路:拓扑排序。注意的是任务是从1开始的到n。Code:#include#includebool dfs(int u,int n);bool toposort(int n);int graph[105][105];int topo[105];int t;in原创 2015-02-04 21:05:13 · 988 阅读 · 0 评论 -
UVa 10054 项链
题意:有一串珠子,每个珠子的前半部分和后半部分都有一种颜色。两个珠子颜色相同的部分,可以连到一起。给定一些珠子看是否能用所有这些珠子串成一个项链。思路:将每个颜色看做一个顶点,每个珠子对应一种颜色到另一颜色的无向边。每个珠子只能用一次,相当于每条边只能用一次。欧拉回路。不过不同的是,这道题需要输出欧拉回路的路径,而且下一路径的起点必须是上一路径的重点。我觉得难点是在这个路径的输出上。 开始的时候我是在dfs()里用 printf("%d%d",n,i); dfs(i);(方式1) 这样是不能满足要求原创 2015-02-03 18:09:48 · 985 阅读 · 0 评论 -
UVa 10596 清晨漫步
题意:有很多路,问能否每条路只走一遍、恰好回到起点?思路:无向图的欧拉回路的应用。但是是神坑的一道题~ 注意:考虑下面的数据Input:3 20 11 02 21 01 04 40 11 02 33 25 60 11 02 32 30 22 04 61 22 12 32 3原创 2015-02-03 16:41:54 · 1053 阅读 · 0 评论 -
UVa 10004 二染色
题意:给定一个无向图,是强连通的,而且无自回路。对顶点进行染色,相邻的顶点需要用不同的颜色,但总共只有两种颜色,是否可行。思路:二部图的判定。其实通过题意思考,也可以发现,如果没有回路是可以的,如果有回路,而回路的顶点个数是偶数个也是可以的,是奇数个则不行。而这正是二部图的充要条件:无向图的所有回路长度都为偶数。 但这里如何判断回路长度不好实现。 这里的思路是,对图进行遍历,dfs或bfs原创 2015-02-01 01:14:47 · 1281 阅读 · 0 评论 -
UVa 10129 单词
题意:给定一些单词,单词的尾字母和另一单词的首字母相同,则可以串联,问是否可以将所有的单词串联。单词可重复出现,但每个单词只能用一次;即某单词重复几次,则可用几次。思路:欧拉道路的应用。欧拉道路,即“一笔画”,从图中一结点出发走一条道路,每条边恰好经过一次。 首先要判断图是连通的。 对于无向图,最多只有两个奇点(度数为奇数)。且从一奇点出发,原创 2015-02-01 01:37:28 · 1257 阅读 · 0 评论 -
UVa 10047 独轮车
题意:独轮车均分为5个部分即五种颜色,每次前进一格恰好换一种颜色接触地面。要求从起点走到终点,但是起点时人是面向北的、绿色接触地面,终点时需要绿色接触地面、朝向哪无所谓。其中,在每个格子,有三种选择,要么前进一格,要么左转90度,要么右转90度。每种选择都是耗时一秒。思路:将每种约束都看做一个属性,或者说一个状态由4元组决定:横坐标、纵坐标、方向、颜色。这样起始状态知道、终点状态知道,进行bf原创 2015-01-28 22:15:42 · 1536 阅读 · 1 评论 -
Uva 439 骑士移动
题意:骑士移动是只能走一个日字的对角线,就像象棋里的马一样。这样计算棋盘上从一格到另一格的最短移动次数。思路:一般,最短次数和 bfs 有关。用bfs先计算从每个格子到其他所有格子的最短距离,后面在遇到输入示例时查表即可。这里用一个四维数组,开始二维代表从棋盘的每一个格子作为出发点,后面两维为棋盘上的每个格子。Code:#includevoid preprocess(int a,i原创 2015-01-27 14:13:26 · 665 阅读 · 0 评论 -
UVa 532 三维迷宫
题意:三维迷宫,可以往前后左右上下8个方向移动。思路:8个方向的移动对应8种三维坐标的变化。这里三维坐标还是按照高、行、列为x、y、z的顺序。和二维迷宫类似,但二维可以把行列统一为 行*长度+列,三维却不可以,只能用结构体。直接用结构体数组表示队列即可,结构体之间可以直接赋值。Code:题意:三维迷宫,可以往前后左右上下8个方向移动。思路:8个方向的移动对应8种三维坐标的变化。这里三维坐标还是按照高、行、列为x、y、z的顺序。和二维迷宫类似,但二维可以把行列统一为 行*长度+列,三维却不可以,只能用原创 2015-01-27 15:26:32 · 946 阅读 · 0 评论 -
UVa 657 掷色子
题意:就是有一张大图,每个像素即格子只可能是 . * X 三种,分别代表背景、色子、色子的点数。两个格子是相邻的或连通的,当且仅当两个格子是*或X,且有公共边,即上下左右四个方向,对角不算,即四连块。将一个连通块看做一个色子,将这个连通块中的X的连通块个数看做该色子的点数。思路:两次深搜。第一次是由*和X来深搜每个连通块,在深搜每个连通块时由X来深搜X的连通块个数。这里可以通过两个标记数组vi原创 2014-09-03 22:03:47 · 939 阅读 · 0 评论 -
UVa 784 迷宫探索
题意:迷宫里有X作为墙,空格为可通过,*标记起点。然后需要你现在来刷墙,刷那些由起点可达的房间的墙,即找由起点可达的连通块。这里题目说墙是除几个字符之外的可打印字符,没有说是X。做题时当成了X,结果AC了~题目说到墙都是3格子宽1格子厚,好像也没什么用~思路:输入时找到起点并记下,然后由起点深搜。注意:从网站拷贝样例数据到txt时,它自动地少了很多空格,导致这个测试数据时不符合题意的。(不原创 2014-09-04 14:56:23 · 953 阅读 · 0 评论 -
UVa 196 电子表格
题意:给定一些电子表格,每个单元格里要么是整数要么是公式,公式是=号开头的,用+号连接的字符串。公式中要用到其他单元格的值,而要用到的其他单元格,可能还是个公式。但可以保证,不会形成单元格的环形的引用。其中,行的标号范围是从1到999,列的标号范围是从A到ZZZ。要求在输出的时候将公式替换为数值。思路:很容易可以看到这和拓扑排序有关,一个单元格值的计算必须要在另一个的之前完成。但是这里没有必要原创 2015-02-05 17:06:55 · 879 阅读 · 0 评论