
Volume 2.2 Graphs
文章平均质量分 67
深蓝色的猫
一个努力成长为大牛的蒟蒻程序媛
展开
-
UVa OJ 572
1、就是深度优先搜索啦。#include int count,m,n,i,j,a[110][110]={0},vis[110][110]={0};int dfs(int i,int j){ if(vis[i][j]||a[i][j]==0) return 0; vis[i][j]=1; dfs(i-1,j-1);dfs(i-1,j);dfs(i-1,j原创 2013-03-20 23:17:56 · 523 阅读 · 0 评论 -
UVa OJ 10596
1、判断无向图是否存在欧拉回路,两个条件:1、图连通,2、所有点度数为偶数。一次AC~#include#includeusing namespace std;int v,e,G[210][210],x,y,d[210],vis[210];void dfs(int u){ vis[u]=1; for(int i=0;i if(G[u]原创 2013-08-28 16:48:06 · 355 阅读 · 0 评论 -
UVa OJ 196
1、好题啊~涉及的知识点很多,要吐槽一下的就是题目比较吓人,列最多达到ZZZ,那数组可能有18000列!怎么想都RE吧~看了别人的题解,发现只要开到1010就可以了,这题目,纯粹是忽悠人。。。2、其实用DFS就可以做了,有人说用拓扑排序,大同小异,拓扑排序也是dfs啊,而且本题不可能有环,也就是不可能有互相调用的两个格子,所以放心dfs。采用记忆化搜索可以提高时间效率。3、本题还用了ato原创 2013-08-28 19:49:39 · 455 阅读 · 0 评论 -
UVa OJ 10305
1、纯拓扑排序。。。在想这么水的题怎么会WA,后来才发现不应写whlie(scanf("%d%d",&v,&e)==2&&v&&e),而应是while后加上if(!v&&!e) break,因为e可以为0!这时也要输出东西来,因为e为0代表对顺序没有要求,不是输不出排列!2、以后一律采用第二种方案读入!不过交了后却发现还是WA,仔细查后发现忘记using namespace std了,加上后果原创 2013-08-28 17:43:08 · 480 阅读 · 0 评论 -
UVa OJ 10054
1、我想说本题又创下了提交次数历史新高。。。2、刚开始我以为题目很复杂,因为项链可以反着串,所以是“一个非常复杂的有向图,每两个结点之间是双向可达的”,其实根本不是这么回事,“非常复杂的有向图”实际上只不过是无向图而已。2、输出可以采用stack,也可以在递归时就简单地把两数调换下位置输出(因为有多种答案,任意输出一种即可),不过还是建议用stack,练练手嘛。3、刚开始反复RE,原来原创 2013-08-20 16:39:32 · 465 阅读 · 0 评论 -
UVa OJ 10004
1、写一个递归程序就行,一次AC~#include #include using namespace std;int n,e,a[210][210],vis[210];bool dfs(int n,int color){ for(int i=1;i if(!vis[a[n][i]]){ vis[a[n][i]]=!color;原创 2013-08-18 17:42:31 · 374 阅读 · 0 评论 -
UVa OJ 10047
1、这道题乍一看让人摸不着头脑,因为和普通的bfs不同,如果颜色不达到要求,即使到了终点也不能结束程序。这就意味着已访问过的结点还可以访问。这要怎么办呢?我没有想出来,上网查后才知道vis最初的定义原来是标记“状态”,而不是“格子”,所以我们有必要用一个四维的vis数组来记录某状态是否访问过,状态包括横坐标、纵坐标、方向、颜色。2、刚开始我是枚举四个方向,不知为何总是WA,调试了很久也没有结果原创 2013-08-18 00:33:31 · 344 阅读 · 0 评论 -
UVa OJ 705
1、这题乍一看让人摸不着头脑,因为斜线来分隔的迷宫实在是太难用数组表示了,实际上有一种表示方法,例如“\”表示成2 0,"/"表示成0 1原创 2013-07-29 18:40:22 · 534 阅读 · 0 评论 -
UVa OJ 784
1、简单的dfs,有两点需要注意,一点是最后的横线不一定和最后的X个数相等,我就是想当然,WA了一次。2、另一点就是注意不要把'\0'填充到样例中空白的地方,'\0’虽然不可见但毕竟是字符。#include #include using namespace std;int n,i,j,h,w,temp;char a[40][100];char s[100];void原创 2013-07-29 20:50:43 · 466 阅读 · 0 评论 -
UVa OJ 10557
1、这题真心把我坑死了,昨天下午两点开始做的,次日凌晨五点才AC(当然中途有休息),uva数据就是BT。。。2、刚开始反复RE,终于明白RE不止是数组越界还可能有栈溢出的原因。据说用STL的队列就显示TLE,如果用普通数组模拟就是RE。长知识了。3、后来反复WA,不知道为什么非常邪门,把bfs改成dfs,再把dfs改成bfs,还是不行,最后只能上网搜解题报告了。4、递归的部分和解题报告原创 2013-08-01 05:34:11 · 593 阅读 · 4 评论 -
UVa OJ 657
1、简单dfs,注意不要把迷宫的代表符号搞混了。。。2、用了STL的sort函数,很方便。#include #include #include using namespace std;int w,h,i,j,k,num=0;char a[60][60];int Count[60];void init(void){ for(i=0;i {原创 2013-07-30 12:18:22 · 452 阅读 · 0 评论 -
UVa OJ 532
1、还是dfs,注意一些细节,比如getchar的运用。#include #include using namespace std;char a[40][40][40];int count[40][40][40];int q[1000];int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};原创 2013-07-30 12:19:38 · 436 阅读 · 0 评论 -
UVa OJ 439
1、注意两点相同的情况,要加一个特判。2、这题就是简单的bfs,但是我却WA了N次,就是因为没加特判,因为我的编译器bfs函数自动返回0(我以为这样就能实现特判了),OJ上的编译器bfs函数自动返回任意值,所以总是过不了。3、一定要养成好的编码习惯,不要投机取巧,不要懒得思考特殊情况。#include#includeusing namespace std;int q[100原创 2013-07-29 14:47:30 · 453 阅读 · 0 评论 -
UVa OJ 10129
1、本题给出一些单词,判断用上所有单词能不能组成一个“单词接龙”,刚开始我以为是用拓扑排序做,把每个单词看作一个点,接龙关系看作有向边,不但空间巨大,写出来还总是WA。后来发现这样写有一个问题:如果图不连通,即有多棵树,那拓扑排序就会是好几棵树的拼接起来的,这样每一棵树的排序结果内部可以保证是能够接龙的,但是树与树之间就没法判别了,因为排列组合有多种情况,而且不知道起点分别在哪。2、后来到网上原创 2013-08-18 23:47:41 · 391 阅读 · 0 评论