数据结构--简单图
omsobliga
这个作者很懒,什么都没留下…
展开
-
10004 - Bicoloring***
/* 极简单一题,但是没有解出。 题目要求:图是强连通的,无向 要求对图中节点染色,只有两种颜色可以选择 判断是否存在一种情况使相邻的两节点颜色都不同 思路: 深度优先搜索 */ #include #include int n,m; bool graph[210][210]; int color[210]; bool dfs(int k,int c) { for(int i=1;i<=原创 2012-02-03 22:25:13 · 639 阅读 · 0 评论 -
HDU 1879 继续畅通工程
/* 思路:在qsort中,将已建数据排列到前面即可。 */ #include #include #include const int nMax = 107; struct Node { int x, y; int cost; int isBuild; }node[nMax * nMax]; int p[nMax]; int N; int find(int x) { return p原创 2012-05-20 21:31:14 · 535 阅读 · 0 评论 -
HDU 1863 畅通工程
/* 简单最小生成树问题 */ #include #include #include const int mMax = 107; const int nMax = 10007; int N, M; int u[nMax], v[nMax], w[nMax], r[nMax]; int p[mMax]; int cmp(const void *a, const void *b) { int原创 2012-05-20 19:16:40 · 530 阅读 · 0 评论 -
HDU 1875 畅通工程再续
/* 原来超时,在①处加上上届即可。英文表示很吃力啊。。。 */ #include #include #include #include const int cMax = 107; const double INF = 1000; struct Co { int x; int y; }co[cMax]; struct Dis { int u, v; double dis; Di原创 2012-05-21 18:55:25 · 493 阅读 · 0 评论 -
HDU 2544 最短路
/* 最基础的Dijkstra算法 */ #include #include const int nMax = 107; const int INF = 100007; int w[nMax][nMax]; int d[nMax]; int N, M; void init() { int i, j; for(i = 0; i <= N; ++ i) for(j = 0; j <= N原创 2012-05-20 23:09:24 · 463 阅读 · 0 评论 -
10305 - Ordering Tasks(****)拓扑排序
/* 简单拓扑排序问题 深度优先,数组st作为存储 */ #include #include const int nMax=105; int n,m; int G[nMax][nMax],visit[nMax],st[nMax]; int top; void dfs(int u) { visit[u]=1; for(int v=1;v<=n;v++) { if(G[u][v] &原创 2012-02-06 22:57:21 · 660 阅读 · 0 评论 -
10557 - XYZZY(****)---Bellman-Ford算法
/* 题意:从1走到n,每走到一个屋子即可获得屋里的能量。 能量值可为负,问是否可以走到n 思路: 题目实际是求从起点到终点的最长路径问题 由于没到一个点,能量值不为负,所以使用d[]来记录到各点后的能量值 ,初始化为0,然后使用循环进行松弛,最后判断d[n]是否大于零,如果 是则可达。但是如果图中出现正环,则可能使程序陷入死循环,则不要 在出现正环时能跳出循环。 另外,在之前需要进行一次初始化,原创 2012-02-09 21:44:06 · 648 阅读 · 0 评论 -
657 - The die is cast(****)
/* 题不错,**** 题意:一幅图,*和X相连的为一块,找出每一块中X的个数, 若X相连被认为是一个。然后排序后输出各块中X的个数 实现:使用数组arr来存储一块,数组account记录X的个数 更好的解法:使用两个数组visit1和visit2,和两个搜索dfs1,dfs2 这样一次历编就可以求出结果。 */ #include #include #include using namesp原创 2012-02-07 23:08:10 · 672 阅读 · 0 评论 -
784 - Maze Exploration
/* 简单题,一次AC 走迷宫问题,深度优先搜索 题意:从*开始走将与之相连的房间里的字符设置成# */ #include #include char G[35][85]; int n; int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}}; bool check(int x,int y) { bool ok=true; if(xn-1 || y=str原创 2012-02-07 23:07:13 · 589 阅读 · 0 评论 -
10129 - Play on Words(*****)欧拉图,并查集
/* 有向欧拉图问题,刘汝佳p112页有详细说明 使用并查集来判断图是否连通,并判断入度和出度情况 题意:将门上的单词最后都拼接在一起, 其中前一个单词的最后一个字母必须和后一个单词的第一个字母相同 */ #include #include #include #include using namespace std; const int nMax=30; //degree int ind原创 2012-02-06 22:58:40 · 604 阅读 · 0 评论 -
10054 - The Necklace(***)
/* 欧拉回路的应用;刘汝佳p112页 总感觉数据不是很全,有些情况不通过。 还有,漏了去判断图是否连通。并查集,详细看10129题 题意:一项链,每个小球有两种颜色,颜色相同的可连在一起,不小心项链断了,问是否还可以围成一个项链。并输出结果 */ #include #include const int nMax=60; int graph[nMax][nMax],p[nMax]; int原创 2012-02-06 22:53:58 · 681 阅读 · 0 评论 -
532 - Dungeon Master(***)
/* 三维迷宫问题,广度优先搜索 使用三维数组step来记录每一点最少的步数即可 或者使用队列记录也可以。 题意:从S到E,最短路径 */ #include #include int l,r,c, sl,sr,sc, el,er,ec; const int nMax=35; char dungeon[nMax][nMax][nMax]; int step[nMax][nMax][nMax原创 2012-02-06 22:56:17 · 820 阅读 · 0 评论 -
439 - Knight Moves
/* 马走棋盘问题 解题思路: 广度优先搜索 使用二维数组step来记录步数 */ #include #include bool chessboard[10][10]; int step[10][10]; int dir[8][2]={1,2,2,1,1,-2,2,-1,-1,2,-2,1,-1,-2,-2,-1}; bool over; struct Node { int x,y;原创 2012-02-03 22:26:02 · 513 阅读 · 0 评论 -
HDU 2066 一个人的旅行
/* 这道题原来WA,错误找了蛮久的,问题出在①处,因为两个城市之间可能存在两条道路。 解题思路:增加一个超级源点,从它到邻近城市的距离为0. */ #include #include const int nMax = 1007; const int INF = 1<<30; int G[nMax][nMax]; int T, S, D, N; int s[nMax], d[nMax];原创 2012-05-21 21:48:32 · 777 阅读 · 0 评论