摘要: 欧拉路,欧拉回路小结 把欧拉路和欧拉回路做一个小总结,包含了一些题目,以后遇到新的我还会陆续加上。 定义: 给定无孤立结点图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在 一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。 关于欧拉路和欧拉回路定义及存在证明请看这里。 这里给出欧拉路和欧拉回路存在条件的结论: 存在欧拉路的条件: 无向图: 图连通,所有点都是偶数度,或者只有两个点是奇数度。当所有点是偶数度时欧拉路起点可以是任意 点;当有两个奇数度点时起点必须是奇数度点。 有向图: 图连通,所有点出度=入度,或者有一个点入度-出度=1, 阅读全文
posted @ 2011-08-02 23:17 枕边梦 阅读(2556) 评论(0) 推荐(1) 编辑
摘要: 优先队列+BFS+保存路径额,先记录前驱,再用栈输出路径,其他的,都快成模板了,最近打得很熟,就是输出的时候,一些小错误改了半天ORZ#include<iostream>#include<queue>#include<algorithm>#include<stack>using namespace std;char map[101][101];int vis[101][101],n,m,mins;bool rescue;int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};struct node{ int x,y,c 阅读全文
posted @ 2011-08-02 22:06 枕边梦 阅读(501) 评论(0) 推荐(0) 编辑
摘要: hdu2141唉,是我 想多了,用普通方法拼命剪枝,还是TLE直接将前俩个数组的和求出来并保存,之后就是一个二分查找的过程了二分的俩种写法第一种#include<iostream>#include<algorithm>#include<string>using namespace std;int a[501],b[501],c[501],f[250001];bool bin_search(int n,int key){ int left=0,right=n-1,mid=0,temp; while(left<right) { temp=mid; mi.. 阅读全文
posted @ 2011-08-02 17:10 枕边梦 阅读(523) 评论(0) 推荐(0) 编辑
摘要: 用栈来模拟操作,主要还是DFS注意回溯条件,还有遍历失败后的操作就没什么了#include<iostream>#include<stack>#include<string>#include<algorithm>using namespace std;char b[200],b1[100],b2[100];//b[]保存路径stack<char> ST;int len1,len2;int cmp( const void* c1,const void* c2){ return *(char *)c1-*(char *)c2;}void d 阅读全文
posted @ 2011-08-02 14:15 枕边梦 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 嘿嘿,终于还是AC了,DFS多开了几个数组,稍微加快了一点点,不然就超时了,原来,一点一点的剪枝,还是有那么一点点用滴,看代码吧#include<iostream>#include<queue>using namespace std;int prime[]={2,3,5,7,11,13,17,19,23,29,31,37};//相邻俩个数的和顶多就37,所以把其中的所有素数都直接打表了int a[20],b[20],n;bool hash1[40];void init()//哈希表{ memset(hash1,0,sizeof(hash1)); for(int i=0; 阅读全文
posted @ 2011-08-02 00:30 枕边梦 阅读(136) 评论(0) 推荐(0) 编辑